我已经看到了有关如何在python中使用'super'的各种示例,但是在所有这些示例中,没有任何参数传递给子类的init方法。考虑以下示例。
这是基类:
class Animal(object):
def __init__(self, genus):
self.genus = genus
现在这里不使用超级:
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
因此,如果对象。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)
使用:
super(Dog, self).__init__(genus)
想一想:什么是超类Dog
?Animal
对于这种情况,将是对此问题的正确答案。但是,如果您使用多重继承,则可能会有所不同。
如果使用Python 3,所有事情都会变得更加简单:
class Dog(Animal):
def __init__(self, genus):
super().__init__(genus)
作品。少犯错误的表面。
如果您需要使用Python 2,请考虑使用Python-Future。比起您可以在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)
该builtins
模块来自Python-Future。使用它,您可以在Python 2中编程Python 3(至少对于所有重要更改)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句