属性的继承和初始化
Inheritance and initialization of attributes
class Email():
def __init__(self, store_number):
self.store_number = store_number
def amethod(self):
pass
将变量从子 class 传递给父 class 的正确方法是什么?
我应该怎么做:
class MoreSpecificEmail():
def __init__(self, store_number):
Email.__init__(self, store_number=store_number)
def another_method(self):
pass
或:
class MoreSpecificEmail():
def __init__(self, store_number):
self.store_number = store_number
Email.__init__(self, store_number=self.store_number)
我刚刚在每个子 class 中使用 store_number
的不同缩写来帮助阐明我的想法。不过,我确定这是错误的方法。
你目前拥有的不是继承;你的类实际上都没有继承自任何东西!首先,Email
应该是 "new-style class",继承自 object
:
class Email(object):
# ^ note inheritance from object
def __init__(self, store_number):
self.store_number = store_number
def amethod(self):
pass
那么 MoreSpecificEmail
应该继承自 Email
- 因为它没有任何额外的实例化参数,它可以只使用继承的 __init__
而不需要定义它拥有:
class MoreSpecificEmail(Email):
# ^ note inheritance from Email
# note no need to define __init__
def another_method(self):
pass
例如,有 个额外的 __init__
参数,请注意您应该使用 super
并依赖超类的 __init__
来分配它需要的参数 - 您只需要分配 不 由超类处理的属性:
class MoreSpecificEmail(Email):
def __init__(self, store_number, something_else):
super(MoreSpecificEmail, self).__init__(store_number)
# ^ pass it straight on
self.something_else = something_else
def another_method(self):
pass
有关详细信息,请参阅 the Python class tutorial。
class Email():
def __init__(self, store_number):
self.store_number = store_number
def amethod(self):
pass
将变量从子 class 传递给父 class 的正确方法是什么? 我应该怎么做:
class MoreSpecificEmail():
def __init__(self, store_number):
Email.__init__(self, store_number=store_number)
def another_method(self):
pass
或:
class MoreSpecificEmail():
def __init__(self, store_number):
self.store_number = store_number
Email.__init__(self, store_number=self.store_number)
我刚刚在每个子 class 中使用 store_number
的不同缩写来帮助阐明我的想法。不过,我确定这是错误的方法。
你目前拥有的不是继承;你的类实际上都没有继承自任何东西!首先,Email
应该是 "new-style class",继承自 object
:
class Email(object):
# ^ note inheritance from object
def __init__(self, store_number):
self.store_number = store_number
def amethod(self):
pass
那么 MoreSpecificEmail
应该继承自 Email
- 因为它没有任何额外的实例化参数,它可以只使用继承的 __init__
而不需要定义它拥有:
class MoreSpecificEmail(Email):
# ^ note inheritance from Email
# note no need to define __init__
def another_method(self):
pass
例如,有 个额外的 __init__
参数,请注意您应该使用 super
并依赖超类的 __init__
来分配它需要的参数 - 您只需要分配 不 由超类处理的属性:
class MoreSpecificEmail(Email):
def __init__(self, store_number, something_else):
super(MoreSpecificEmail, self).__init__(store_number)
# ^ pass it straight on
self.something_else = something_else
def another_method(self):
pass
有关详细信息,请参阅 the Python class tutorial。