簡體   English   中英

python中的類常量

[英]Class constants in python

在 python 中,我希望一個類具有一些在所有子類中通用的“常量”(實際上是變量)。 有沒有辦法用友好的語法來做到這一點? 現在我使用:

class Animal:
    SIZES=["Huge","Big","Medium","Small"]

class Horse(Animal):
    def printSize(self):
        print(Animal.SIZES[1])

我想知道是否有更好的方法來做到這一點,或者無需編寫“動物”就可以做到這一點。 在尺寸之前。 Horse繼承自Animal。

由於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)

或者,您可以創建中間類: HugeAnimalBigAnimal等。 如果每個動物類都包含不同的邏輯,那將特別有用。

您可以通過self.SIZES (在實例方法中)或cls.SIZES (在類方法中)獲得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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM