파이썬에서는 클래스에 모든 서브 클래스에서 공통적 인 “상수”(실제로 변수)를 갖기를 원합니다. 친근한 문법으로 할 수있는 방법이 있습니까? 지금 나는 사용합니다 :
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.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