Answers:
由于Horse是的子类Animal,您可以更改
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)
或者,您可以创建中间类:HugeAnimal,BigAnimal等等。如果每个动物类别都包含不同的逻辑,那将特别有用。
您可以SIZES通过self.SIZES(在实例方法中)或cls.SIZES(在类方法中)到达。
无论如何,您都必须明确说明在哪里可以找到SIZES。一种替代方法是将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
print SIZE_BIG下课会一样吗?可以编辑Animal.SIZE_HUGE = 'Small'吗?
SIZES永不改变,请绝对使用元组而不是列表。像这样("Huge","Big","Medium","Small")