属性的继承和初始化

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