在Python3中,可以使用super()而不是super(MyClass,self),但这只适用于类内部定义的方法。如MicheleSimionato'sarticle中所述以下示例不起作用:def__init__(self):print('calling__init__')super().__init__()classC(object):__init__=__init__if__name__=='__main__':c=C()失败是因为super()寻找一个__class__cell,在这种情况下没有定义。是否可以在定义函数后手动设置此单元格,还是不可能?不幸的是,我不明白单元格在
Pythondocumentation表示每个类的__init__方法负责初始化其父类(superclass)。但是对于新型类,最终的基类是object。执行dir(object)表明object本身有一个__init__方法并且可能被初始化。有什么理由这样做吗?我倾向于这样做是为了保持一致性和(稍微)更容易地重构类层次结构,但我想知道这是否绝对必要或是否被认为是最佳实践。 最佳答案 您不需要初始化对象;它的__init__是一个空操作。不过,这仍然是一种很好的做法,因为您稍后可能想在层次结构中引入一个中间类。
在virtualenv中运行pipinstallPillow==2.9.0时出现以下错误:error:Error-5whiledecompressingdata:incompleteortruncatedstream其他软件包安装/卸载正常,它似乎只影响Pillow2.9.0。我在(或不在)什么virtualenv似乎并不重要。下载源压缩包并从中安装有效,但由于这是在构建服务器上,这不是理想的解决方法,因为我想依赖pipinstall-rrequirements.txt版本:pip--version:来自/usr/local/lib/python2.7/site-packages(py
当我尝试重写魔术方法__eq__,并使用super访问object中的基本方法时,出现错误.这不可能是一个错误,但感觉确实像一个错误:classA(object):def__eq__(self,other):returnsuper(A,self).__eq__(other)A()==0#raisesAttributeError:'super'objecthasnoattribute'__eq__'这是不直观的,因为object.__eq__存在,但对于classA(object):pass它不存在。如果我没记错的话,__eq__求助于is检查,所以这可能是这里的解决方法,但使用is而不
这个问题在这里已经有了答案:Howtoavoidinfiniterecursionwithsuper()?(1个回答)关闭3年前。我有一个类层次结构AUnderstandingPythonsuper()with__init__()methods#!/usr/bin/pythonclassA(object):def__init__(self,v,v2):self.v=vself.v2=v2classB(A):def__init__(self,v,v2):#Dosomeprocessingsuper(self.__class__,self).__init__(v,v2)classC(B):
假设我有一些调用__new__的类,我如何才能很好地使用mro并根据需要调用父类(superclass)的__new__(带参数),但不使用附加参数调用object.__new__?例如。这仅在您不向构造函数传递任何参数时才有效:classA(object):def__new__(cls,*args,**kwargs):print("A.__new__called")returnsuper(A,cls).__new__(cls,*args,**kwargs)classB(object):def__new__(cls,*args,**kwargs):print("B.__new__cal
使用super()和直接使用父类名有区别吗?例如:classParent:def__init__(self):print("Inparent")self.__a=10classChild(Parent):def__init__(self):super().__init__()#usingsuper()Parent.__init__(self)#usingParentclassnamec=Child()super().__init__()和Parent.__init__(self)在内部有区别吗? 最佳答案 不是这种情况。但是一般,尤
我可以在Python中使用任何魔法来通过添加一些额外的参数来有效地使用super构造函数吗?理想情况下,我想使用类似的东西:classZipArchive(zipfile.ZipFile):def__init__(self,verbose=True,**kwargs):"""Constructorwithsomeextraparams.Forotherparamssee:zipfile.ZipFile"""self.verbose=verbosesuper(ZipArchive,self).__init__(**kwargs)然后能够将原始构造函数参数与我类(class)的一些额外内容
通常我倾向于通过包管理器安装东西,用于unixy的东西。然而,当我编写大量perl程序时,我会使用CPAN、更新版本等等。一般来说,我过去常常通过包管理器安装系统的东西,通过它自己的包管理器(gem/easy_install|pip/cpan)安装语言的东西现在主要使用python,我想知道最佳实践是什么? 最佳答案 系统python版本及其库经常被发行版中的软件使用。只要您使用的软件对与您的发行版相同的python版本和所有库感到满意,那么使用发行包就可以正常工作。然而,您经常需要软件包的开发版本,或更新版本,或旧版本。然后它就不
我正在尝试编写一个Python脚本来让我在https://fantasy.premierleague.com/登录我的梦幻足球帐户。,但我的登录有些不对劲。当我通过浏览器登录并使用Chrome开发人员工具检查详细信息时,我发现请求URL是https://users.premierleague.com/accounts/login/发送的表单数据是:csrfmiddlewaretoken:[Mytoken]login:[Myusername]password:[Mypassword]app:plfpl-webredirect_uri:https://fantasy.premierleag