반응형
파이썬의 클래스 상수
파이썬에서는 클래스가 모든 서브 클래스에서 공통적 인 일부 "상수"(실제로는 변수)를 갖기를 원합니다. 친숙한 구문으로 수행하는 방법이 있습니까? 지금은 다음을 사용합니다.
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
참고 URL : https://stackoverflow.com/questions/10672419/class-constants-in-python
반응형
'programing tip' 카테고리의 다른 글
Pandas로 txt에서 데이터로드 (0) | 2020.08.11 |
---|---|
미학과 geom_text를 사용할 때 범례에서 'a'제거 (0) | 2020.08.10 |
내부 클래스가 개인 변수에 액세스 할 수 있습니까? (0) | 2020.08.10 |
magento의 캐시 관리에서 "Flush Magento Cache"와 "Flush Cache Storage"의 차이점은 무엇입니까? (0) | 2020.08.10 |
strace가 인수를 축약하는 것을 방지 하시겠습니까? (0) | 2020.08.10 |