このように関連する const を定義するのは pythonic ですか?
定義:
class LinkChoices(object):
FOLLOW, FRIENDSHIP, CLOSE_FRIENDSHIP, = 10, 20, 30,
使用:
from some_module import LinkChoices
link.status = LinkChoices.FOLLOW
このように const を定義することの短所はありますか?
このように関連する const を定義するのは pythonic ですか?
定義:
class LinkChoices(object):
FOLLOW, FRIENDSHIP, CLOSE_FRIENDSHIP, = 10, 20, 30,
使用:
from some_module import LinkChoices
link.status = LinkChoices.FOLLOW
このように const を定義することの短所はありますか?
リンクされたスレッドで示唆されているように、次のように、定数の偶発的な再定義に対して防御的で対策を講じることもできます。
def const(cls):
class _const(type):
def __setattr__(self,name,value):
raise ValueError("Can't rebind const(%s)" % name)
class _(cls):
__metaclass__ = _const
return _
@const
class LinkChoices(object):
FOLLOW, FRIENDSHIP, CLOSE_FRIENDSHIP, = 10, 20, 30,
LinkChoices.FOLLOW = 123 # raises ValueError
ただし、これが「pythonic」であるかどうかはわかりません。むしろそうではないと思います。
はい、クラス名に ALL_CAPS を使用しないことを除けば、かなり Pythonic だと思います。
また、末尾のコンマのポイントもわかりません。
最後に、個人的には、定数を同じ行にまとめるのではなく、1 行に 1 つの定数を定義することをお勧めします。
詳細については、Python で定数を作成する方法を参照してください。