如何在 Python 3 中的不同 class 中使用相同的 class 属性?

How to use the same class attributes in different classes in Python 3?

我有 2 组属性,我想以相同的方式但在不同的 classes 中使用它们。我正在尝试将这些集合混合为 class 属性以避免 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 它将起作用,但是将此代码放入 class 本身是一样的。

如何以经济的方式对不同的 attr 使用相同的处理逻辑?

添加方法所需的一个位置参数(通常称为self),适当使用它,它将如您所愿地工作:

class Base:
    def printAttr(self):
        print(self.attr)

>>> c1 = Combo1()
>>> c1.printAttr()
Monty

>>> c2 = Combo2()
>>> c2.printAttr()
Python

快速提示:无论何时在 class 下使用函数(方法),始终在其参数中提供 'self'。这对所有方法都是必须的。事实上,如果你使用 Pycharm IDE,它会自动完成 self 参数。