programing tip

파이썬의 클래스 상수

itbloger 2020. 8. 10. 07:48
반응형

파이썬의 클래스 상수


파이썬에서는 클래스가 모든 서브 클래스에서 공통적 인 일부 "상수"(실제로는 변수)를 갖기를 원합니다. 친숙한 구문으로 수행하는 방법이 있습니까? 지금은 다음을 사용합니다.

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

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

더 나은 방법이 있는지 아니면 "동물"을 쓰지 않고도 할 수있는 방법이 있는지 궁금합니다. 크기 전에. 감사! 편집 : 말이 동물로부터 물려 받는다는 것을 언급하는 것을 잊었다.


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.SIZEScls.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

참고 URL : https://stackoverflow.com/questions/10672419/class-constants-in-python

반응형