如何使用 super() 在 python 中初始化子类参数
How to initialize subclass parameters in python using super()
我在 How to use 'super' in python 上看过各种示例,但在所有这些示例中,都没有向 subclass' init 方法传递任何参数。考虑以下示例。
这里是基础class:
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() 没有参数,我如何在实例化那个 subclass 时设置这个特定动物的特定属?我是否必须像这样显式分配变量:
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
的超级class是什么?对于这种情况,Animal
将是该问题的正确答案。但是如果你使用多重继承,这可能会有所不同。
Python 3个救援
如果你使用Python 3,一切都会变得更简单:
class Dog(Animal):
def __init__(self, genus):
super().__init__(genus)
有效。犯错误的表面少得多。
Python Python 3 个细节 Python-Future
如果您需要使用 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(至少对于所有重要更改)。
我在 How to use 'super' in python 上看过各种示例,但在所有这些示例中,都没有向 subclass' init 方法传递任何参数。考虑以下示例。
这里是基础class:
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() 没有参数,我如何在实例化那个 subclass 时设置这个特定动物的特定属?我是否必须像这样显式分配变量:
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
的超级class是什么?对于这种情况,Animal
将是该问题的正确答案。但是如果你使用多重继承,这可能会有所不同。
Python 3个救援
如果你使用Python 3,一切都会变得更简单:
class Dog(Animal):
def __init__(self, genus):
super().__init__(genus)
有效。犯错误的表面少得多。
Python Python 3 个细节 Python-Future
如果您需要使用 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(至少对于所有重要更改)。