作为一名在Java中工作更多的人,我在Python中对类属性的多态引用进行了很多困难。
我想要做的是在基类中有一个方法来修改"静态"基类的变量(又称类属性),但是当从派生类调用方法时,该方法修改派生类的类属性,而不是基类。注意,我没有覆盖派生类中的方法。
例如,我有类似的东西:
class BaseClass:
itemList = []
def addItem(thing):
BaseClass.itemList.append(thing)
class Child1(BaseClass):
pass
class Child2(BaseClass):
pass
...
Child1.addItem("foo")
Child2.addItem("bar")
print(str(Child1.itemList))
我喜欢:" foo"
我得到:" foo,bar"
现在,我理解由于" BaseClass.itemList.append(thing)",它将引用基类的class属性。
换句话说,有没有办法避免说" BaseClass.itemList",但保持静态,或者我是否需要覆盖每个子类中的方法?
答案 0 :(得分:1)
你可以有一个“静态”类变量,可以被类的每个实例更改:
class BaseClass:
itemList = []
def addItem(self, thing):
self.itemList.append(thing)
class Child1(BaseClass):
itemList = []
class Child2(BaseClass):
itemList = []
# each class has its own "itemList"
# now we can instantiate each class and use the different itemLists:
c1 = Child1()
c1.addItem("foo")
c2 = Child2()
c2.addItem("bar")
c3 = Child1()
c3.addItem("foo2")
print(str(Child1.itemList)) # prints: ['foo', 'foo2']
print(str(Child2.itemList)) # prints: ['bar']