如何使用super()在python中初始化子类参数
我在上看到了各种示例,但在所有这些示例中,都没有参数传递给子类的init方法。考虑下面的例子。 下面是基类:如何使用super()在python中初始化子类参数,python,inheritance,super,Python,Inheritance,Super,我在上看到了各种示例,但在所有这些示例中,都没有参数传递给子类的init方法。考虑下面的例子。 下面是基类: class Animal(object): def __init__(self, genus): self.genus = genus 现在,在不使用super的情况下: class Dog(Animal): def __init__(self, genus): Animal.__init__(self, genus) x = D
class Animal(object):
def __init__(self, genus):
self.genus = genus
现在,在不使用super的情况下:
class Dog(Animal):
def __init__(self, genus):
Animal.__init__(self, genus)
x = Dog('Canis')
print x.genus # Successfully prints "Canis"
现在,当我使用super时:
class Dog(Animal):
def __init__(self, genus):
super(Animal, self).__init__(genus)
x = Dog('Canis')
print x.genus
我得到以下错误:
TypeError: object.__init__() takes no parameters
那么,如果object.init()不接受任何参数,那么在实例化该子类时,如何设置该特定动物的特定属?我是否必须像这样显式地分配变量:
class Dog(Animal):
def __init__(self, genus):
super(Animal, self).__init__()
self.genus = genus
修复
写:
class Dog(Animal):
def __init__(self, genus):
super(Dog, self).__init__(genus)
因此,不是:
super(Animal, self).__init__(genus)
使用:
想一想:狗的超类是什么Animal
将是本案例中此问题的正确答案。但如果使用多重继承,则可能会有所不同
巨蟒3号用于救援
如果使用Python 3,所有事情都会变得更简单:
class Dog(Animal):
def __init__(self, genus):
super().__init__(genus)
工作。更不用说犯错误了
Python 2中的Python 3细节与Python未来
如果需要使用Python 2,请考虑。然后在Python 2上执行此操作:
from builtins import object, super
class Animal(object):
def __init__(self, genus):
self.genus = genus
class Dog(Animal):
def __init__(self, genus):
super().__init__(genus)
x = Dog('Canis')
print(x.genus)
这个内置模块来自Python Future。使用它,您可以在Python2中编程Python3(至少对于所有重要的更改) super
的要点是始终使用当前类。
from builtins import object, super
class Animal(object):
def __init__(self, genus):
self.genus = genus
class Dog(Animal):
def __init__(self, genus):
super().__init__(genus)
x = Dog('Canis')
print(x.genus)