猿问

Python在没有多重继承的情况下调用超级 - 每次都获得一个新副本

我想利用多个子类共享同一个父类的能力。如何在不调用多重继承的情况下执行此操作。


class Base(object):

    shared_thing = 'Hello'

    things = []


    def __init__(self, message):

        self.things.append(message)



class One(Base):

    def __init__(self, json_message):

        super(One, self).__init__(json_message)



class Two(Base):

    def __init__(self, message):

        super().__init__(message)



class Three(Base):

    def __init__(self, message):

        Base.__init__(self, message)



one = One('one')

print('ONE: ' + str(one.things))



one = One('one but a second time')

print('ONE: ' + str(one.things))



two = Two('two')

print('TWO: ' + str(two.things))


three = Three('three')

print('THR: ' + str(three.things))


base = Base('base again')

print('BAS: ' + str(base.things))

但是,super的这三个不同的初始化会给我同一个对象的引用


ONE: ['one']

ONE: ['one', 'one but a second time']

TWO: ['one', 'one but a second time', 'two']

THR: ['one', 'one but a second time', 'two', 'three']

BAS: ['one', 'one but a second time', 'two', 'three', 'base again']

我没有使用 python 获得超级面向对象,所以如果这是错误的方法,请原谅。


饮歌长啸
浏览 224回答 1
1回答

弑天下

您可能打算things像这样设置为实例变量:class Base(object):    shared_thing = 'Hello'    def __init__(self, message):        self.things = []        self.things.append(message)
随时随地看视频慕课网APP

相关分类

Python
我要回答