2010-05-28 63 views
1

我有下面的类:如何在函数中引用类变量而不引用其在Python中的类?

class Foo: 
    CONSTANT = 1 

    def some_fn(self): 
     a = Foo.CONSTANT 
     # do something 

我怎么可以参考Foo.CONSTANT没有提及Foo,或者参考Foo在一个通用的方式? (我不想在重命名类时更改所有对它的引用)

+0

也许你应该考虑更强大的IDE? Eclipse + PyDev有一些非常强大的重构工具 - 在这种情况下,您可以重构>将“Foo”重命名为“Bar”,它会为您处理所有这些。 – detly 2010-05-28 02:37:01

回答

4

Foo类的方法或者其任何亚,self.CONSTANT将参考在Foo类(即类属性定义的值,除非它在一个子类,或者在该实例本身真实覆盖 - 如果你分配self.CONSTANT=23,它是使用该值创建的实例属性,它将覆盖将来参考中的属性。

+0

出于某种原因,我没有想到明显的第一。 – 2010-05-28 02:48:31

+0

除非他用'self .__ class __。CONSTANT'来引用它。这样,重新分配仍然绑定到类变量,而不是重写(如果这确实是所需的行为)。 ;-) – Santa 2010-05-28 04:47:54

+1

@Santa,如果实例是来自'Foo'的派生类,'self .__ class __。CONSTANT = 23'将创建或重新绑定_derived_类的属性,** not ** rebind'Foo'' s - 所以事情比你描述的更加微妙。 – 2010-05-28 05:24:11

1

self.CONSTANT是否有任何理由不符合您的需求?

class Foo: 
    CONSTANT = 1 

    def some_fn(self): 
     a = self.CONSTANT 
     # do something 
1

在你的例子中,self.CONSTANT可以工作,但是如果你曾经分配到self.CONSTANT,那将会“覆盖”在类上定义的值。您可以使用self.__class__.CONSTANT来始终引用该类上定义的值。你甚至可以指定。

+0

这是恒定的,他不应该分配给它。 – Ponkadoodle 2010-05-28 02:48:37

+1

唯一不变的就是变化。 =) – 2010-05-28 02:50:10

相关问题