在Python3中,如何在不同的类中使用相同的类属性?
我有两组属性,我想以相同的方式在不同的类中使用它们。我试图将这些集合作为类属性混合在一起,以避免在Python3中,如何在不同的类中使用相同的类属性?,python,python-3.x,oop,mixins,Python,Python 3.x,Oop,Mixins,我有两组属性,我想以相同的方式在不同的类中使用它们。我试图将这些集合作为类属性混合在一起,以避免super调用和不必要的复杂性: class Base: def printAttr(): print(attr) class MixIn1: attr = "Monty" class MixIn2: attr = "Python" class Combo1(Base, MixIn1): pass class Combo2(Base, MixIn
super
调用和不必要的复杂性:
class Base:
def printAttr():
print(attr)
class MixIn1:
attr = "Monty"
class MixIn2:
attr = "Python"
class Combo1(Base, MixIn1):
pass
class Combo2(Base, MixIn2):
pass
c1 = Combo1()
print(c1.attr) # it is assigned
c1.printAttr()
结果是name错误:未定义名称“attr”
。显然,如果我显式调用MixIn1.attr
,它会起作用,但这与将此代码放入类本身是一样的
如何以经济的方式为不同的
attr
s使用相同的处理逻辑 添加方法所需的一个位置参数(通常称为self
),适当地使用它,它将按预期工作:
class Base:
def printAttr(self):
print(self.attr)
>>> c1 = Combo1()
>>> c1.printAttr()
Monty
>>> c2 = Combo2()
>>> c2.printAttr()
Python
快速提示:无论何时在类下使用函数(方法),都要在其参数中指定“self”。这对于所有方法都是必须的。实际上,如果使用Pycharm IDE,它会自动完成self参数。错误与显示的代码不匹配。请显示实际代码。您发布的代码将抛出TypeError,因为
printAttr
缺少self
参数;修复该问题将引发NameError,因为该方法中未定义attr
。此外,在printtr
方法中缺少self
参数。添加self
参数并访问self.attr
后,该方法工作正常。这看起来只是你的疏忽。你可以使用self
。谢谢。我认为,self
仅用于实例属性,而不是类属性。