나는 공통 데이터 구조 내에서 비교되고 정렬 될 수있는 클래스를 만들었습니다.클래스 초기화 메소드를 사용하는 파이썬 클래스 상수?
클래스에서 취할 수있는 최대 값과 최소값에 대해 두 개의 클래스 상수를 만들고 싶었습니다. 그래서 난 그냥 MyClass에 가져 오기 및
obj = MyClass.MY_MAX_CONSTANT
것은이 생성자 또는 이러한 상수를 초기화 초기화 메소드를 호출하는 것은 허용되지 않습니다 있는지를 쓰고이 값을 호출 할 수 있습니다.
자바에서는 정적으로 선언되어 작동하지만, 생성자/초기화 메소드를 사용하여 Python에서 클래스/정적 상수를 어떻게 수행 할 수 있는지 알 수 없습니다. 검색 기능이 많지 않지만 상수에 대한 일반적인 요리법 및 속성을 만들기위한 제안을 찾지 못했습니다.
필자는 확실히 변경하지 않기 때문에 상수 값을 변경하지 않는 메커니즘이 필요하지 않습니다. 각 상수에 대한 몇 가지 기능을 사용하여,
class MyClass(object):
MY_MAX_CONSTANT = MyClass(10,10)
MY_MIN_CONSTANT = MyClass(0,0)
def __init__(self, param1, param2): # Not the exact signature, but I think this works as an example
# We imagine some initialization work here
self.x = param1
self.y = param2
# SORT FUNCTIONS
def __cmp__(self, other):
# Implementation already made here
def __eq__(self, other):
# Implementation already made here
def __ne__(self, other):
# Implementation already made here
def __ge__(self, other):
# Implementation already made here
# And so on...
두 번째 시도 :
내 첫 번째 시도였다
class MyClass(object):
def __init__(self, param1, param2): # Not the exact signature, but I think this works as an example
# We imagine some initialization work here
self.x = param1
self.y = param2
MY_MAX_CONSTANT = None
MY_MIN_CONSTANT = None
@staticmethod
def get_max(self):
if not MyClass.MY_MAX_CONSTANT:
MyClass.MY_MAX_CONSTANT = MyClass(10,10)
return MyClass.MY_MAX_CONSTANT
@staticmethod
def get_min(self):
if not MyClass.MY_MIN_CONSTANT:
MyClass.MY_MIN_CONSTANT = MyClass(0,0)
return MyClass.MY_MIN_CONSTANT
# SORT FUNCTIONS (I'm not writing them twice for spacing)
하지만 두 상수를 만들기위한 이상한 기능 메커니즘을 방지하기 위해 원했다.
내게 더 자연 스럽기 때문에 모듈에없는 상수를 선호하지만 조언이나 제안을 듣고 있습니다. 누구든지 나를 더 나은 pythonic 솔루션을 가리킬 수 있습니까?
감사
"문제는 생성자 또는 init 메서드를 호출하여 이러한 상수를 초기화 할 수 없다는 것입니다." - 누가 그걸 허락하지 않니? 너의 선생님? 파이썬은 그것을 허용하지만 클래스가 실제로 존재하면 상수를 생성해야합니다. 클래스 문 본문에는 아직 존재하지 않습니다. – user2357112
어디서 상수를 정의해야합니까? init은 나에게 재귀 적으로 호출하기 좋은 곳처럼 보이지 않는다. – madtyn