Python 在没有多重继承的情况下调用 Super - 每次都获取一个新副本
Python Calling Super Without Multiple Inheritance - Get a new copy every time
我想利用多个子 class 共享同一个父 class 的能力。如何在不调用多重继承的情况下执行此操作。
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 的超级面向对象,所以如果这是错误的方法,请原谅。
谢谢!
您可能打算像这样将 things
设置为实例变量:
class Base(object):
shared_thing = 'Hello'
def __init__(self, message):
self.things = []
self.things.append(message)
我想利用多个子 class 共享同一个父 class 的能力。如何在不调用多重继承的情况下执行此操作。
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 的超级面向对象,所以如果这是错误的方法,请原谅。
谢谢!
您可能打算像这样将 things
设置为实例变量:
class Base(object):
shared_thing = 'Hello'
def __init__(self, message):
self.things = []
self.things.append(message)