【发布时间】:2017-12-11 19:03:36
【问题描述】:
我有两组属性,我想以相同的方式但在不同的类中使用它们。我试图将这些集合作为类属性混合,以避免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()
结果是NameError: name 'attr' is not defined。显然,如果我显式调用MixIn1.attr,它将起作用,但将这段代码放入类本身也是一样的。
如何以经济的方式对不同的attrs 使用相同的处理逻辑?
【问题讨论】:
-
错误与显示的代码不匹配。
-
请显示实际代码。您发布的代码会抛出 TypeError,因为
printAttr缺少self参数;并修复它会抛出 NameError,因为attr没有在该方法中定义。 -
另外,您在
printAttr方法中缺少self参数。 -
添加
self参数并访问self.attr后,它工作正常。这看起来只是你的粗心大意。 -
你可以使用
self。
标签: python python-3.x oop mixins