如何在 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 参数。
我有 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 参数。