属性的继承和初始化

时间:2015-03-18 15:56:10

标签: python python-2.7 oop inheritance

class Email():

    def __init__(self, store_number):
        self.store_number = store_number

    def amethod(self):
        pass

将变量从子类传递给父类的正确方法是什么? 我应该这样做:

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)

我刚刚在每个子类中使用store_number的不同缩写来帮助澄清我脑子里正在发生的事情。不过,我确信这是错误的方式。

1 个答案:

答案 0 :(得分:4)

您目前拥有的不是继承;你的类都没有实际上继承自任何东西!首先,Email应该是“新式类”,继承自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