반응형
파이썬의 클래스 상수
파이썬에서 저는 클래스가 모든 하위 클래스에서 공통적으로 사용될 "상수"(실제로는 변수)를 가지길 원합니다.친근한 구문으로 할 수 있는 방법이 있습니까?지금은 다음을 사용합니다.
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)
Betbandido의 답변을 확장하여, 당신은 속성을 상수로 모듈에 주입하는 함수를 작성할 수 있습니다.
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' 카테고리의 다른 글
가지고 놀만한 흥미로운 C/C++ 라이브러리는 무엇입니까? (0) | 2023.07.10 |
---|---|
오래된 Git commit을 어떻게 수정합니까? (0) | 2023.07.10 |
단일 SQL 연결에서 여러 SQL 명령을 실행하는 방법은 무엇입니까? (0) | 2023.07.10 |
ggplot2 플롯 영역 여백? (0) | 2023.07.10 |
SQL 서버에 IP 주소를 저장하는 데 가장 적합한 데이터 유형은 무엇입니까? (0) | 2023.07.10 |