私は、共通のデータ構造内で比較およびソートできるクラスを作成しました。クラスinitメソッドを使用するPythonクラス定数?
私はクラスが取ることができる最大値と最小値に対して2つのクラス定数を作りたかったということです。だから私はちょうど事をMyClassのインポートと
obj = MyClass.MY_MAX_CONSTANT
を書いて、この値を呼び出すことができ、これらの定数を初期化するコンストラクタまたはのinitメソッドを呼び出すことが許可されていないことです。
これは静的として宣言され、うまくいくはずですが、コンストラクタ/ initメソッドを使用して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...
2回目の試行:
私の最初の試みでした
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)
しかし、私は唯一の2つの定数を作るための奇妙な機能のメカニズムを避けたかったです。
私はもっと自然な感じがするので、私はクラス内で定数が好きですが、私はアドバイスや提案を聞いています。誰かが私に良いpythonicソリューションを指摘できますか?
おかげ
"これらの定数を初期化するコンストラクタまたはinitメソッドを呼び出すことはできません。"誰がそれを許していないのですか?あなたの先生? Pythonはそれを許しますが、クラスが実際に存在すると定数を作成しなければなりません。クラスの中身はまだ存在しません。 – user2357112
定数はどこで定義する必要がありますか? initは再帰的に自分自身を呼び出す良い場所のようには見えません – madtyn