我有下面的类:如何在函数中引用类变量而不引用其在Python中的类?
class Foo:
CONSTANT = 1
def some_fn(self):
a = Foo.CONSTANT
# do something
我怎么可以参考Foo.CONSTANT
没有提及Foo
,或者参考Foo
在一个通用的方式? (我不想在重命名类时更改所有对它的引用)
我有下面的类:如何在函数中引用类变量而不引用其在Python中的类?
class Foo:
CONSTANT = 1
def some_fn(self):
a = Foo.CONSTANT
# do something
我怎么可以参考Foo.CONSTANT
没有提及Foo
,或者参考Foo
在一个通用的方式? (我不想在重命名类时更改所有对它的引用)
在Foo
类的方法或者其任何亚,self.CONSTANT
将参考在Foo
类(即类属性定义的值,除非它在一个子类,或者在该实例本身真实覆盖 - 如果你分配self.CONSTANT=23
,它是使用该值创建的实例属性,它将覆盖将来参考中的类属性。
出于某种原因,我没有想到明显的第一。 – 2010-05-28 02:48:31
除非他用'self .__ class __。CONSTANT'来引用它。这样,重新分配仍然绑定到类变量,而不是重写(如果这确实是所需的行为)。 ;-) – Santa 2010-05-28 04:47:54
@Santa,如果实例是来自'Foo'的派生类,'self .__ class __。CONSTANT = 23'将创建或重新绑定_derived_类的属性,** not ** rebind'Foo'' s - 所以事情比你描述的更加微妙。 – 2010-05-28 05:24:11
self.CONSTANT是否有任何理由不符合您的需求?
class Foo:
CONSTANT = 1
def some_fn(self):
a = self.CONSTANT
# do something
在你的例子中,self.CONSTANT
可以工作,但是如果你曾经分配到self.CONSTANT
,那将会“覆盖”在类上定义的值。您可以使用self.__class__.CONSTANT
来始终引用该类上定义的值。你甚至可以指定。
这是恒定的,他不应该分配给它。 – Ponkadoodle 2010-05-28 02:48:37
唯一不变的就是变化。 =) – 2010-05-28 02:50:10
也许你应该考虑更强大的IDE? Eclipse + PyDev有一些非常强大的重构工具 - 在这种情况下,您可以重构>将“Foo”重命名为“Bar”,它会为您处理所有这些。 – detly 2010-05-28 02:37:01