Python中的类常量

在python中,我想要一个类有一些“常量”(实际上是variables),这在所有的子类中都是常见的。 有没有办法用友好的语法来做到这一点? 现在我用:

class Animal: SIZES=["Huge","Big","Medium","Small"] class Horse(Animal): def printSize(self): print(Animal.SIZES[1]) 

我想知道是否有更好的方法来做到这一点或做一个方法,而不必写“动物”。 之前的大小。 谢谢! 编辑:忘了提到,马从动物遗传。

由于HorseAnimal一个子类,你可以改变

 print(Animal.SIZES[1]) 

 print(self.SIZES[1]) 

不过,你需要记住的是, SIZES[1]意思是“大”,所以你可能通过做如下的改进你的代码:

 class Animal: SIZE_HUGE="Huge" SIZE_BIG="Big" SIZE_MEDIUM="Medium" SIZE_SMALL="Small" class Horse(Animal): def printSize(self): print(self.SIZE_BIG) 

或者,您可以创build中间类: HugeAnimalBigAnimal等。 如果每个动物类将包含不同的逻辑,那将是特别有用的。

您可以通过self.SIZES (在实例方法中)或cls.SIZES (在类方法中)来获取SIZES

无论如何,你必须明确在哪里可以findSIZES 。 另一种方法是将SIZES放入包含类的模块中,但是需要在单个模块中定义所有的类。

 class Animal: HUGE = "Huge" BIG = "Big" class Horse: def printSize(self): print(Animal.HUGE) 

扩展betabandido的答案,你可以编写一个函数,将属性作为常量注入模块中:

 def module_register_class_constants(klass, attr_prefix): globals().update( (name, getattr(klass, name)) for name in dir(klass) if name.startswith(attr_prefix) ) class Animal(object): SIZE_HUGE = "Huge" SIZE_BIG = "Big" module_register_class_constants(Animal, "SIZE_") class Horse(Animal): def printSize(self): print SIZE_BIG