假设我的类中有一个(正常绑定)方法,它必须访问类变量(比如__init__
中的计数器)。如果我想修改类变量,有三种可能:
type(self)
或self.__class__
(在阅读了this之后,我选择了type
而不是__class__
,因为我使用的是python3,所以“旧式”类不适用)@classmethod
。这是最复杂,但也是最明确的方法(IMO)。你知道吗这三种方法是这样写的:
class MyClass:
counter = 0
def f1(self):
type(self).counter += 1
def f2(self):
MyClass.counter += 1
def f3(self):
self._count()
@classmethod
def _count(cls):
cls.counter += 1
是否有一个明确的“最佳”选项,是哪一个?或者它们或多或少都是等价的,只是“我最喜欢的”选项?继承会改变什么吗?
如果从定义变量的类派生出类(可能是赋值给它的方法),则使用
type(self)
将属性(新值)存储在对象的实际类上。这可能非常有用,但在您的示例中是surely wrong。你知道吗使用类方法是一样的,只是子类可以重写方法:这可能会使复杂的情况起作用,但不会修复简单的继承情况。你知道吗
使用类名是一个简单的,惯用的答案,避免了子类的混淆。如果不担心重新绑定该名称,那么即使没有任何继承,这也应该是默认值。如果这是一个问题,您可以用两种不同的方式隐藏类对象:
__class__
技巧当然可以直接使用,不需要包装器方法,但是它有点难看;在内部,它与上一种方法非常相似。一件不起作用的事情是试图创建一个引用类的字典的函数,因为这些函数是出于优化的原因而受到保护的。你知道吗相关问题 更多 >
编程相关推荐