は、クラス内にプライベートクラス変数を保持し、それをデフォルト以外の変数のデフォルト値として使用する方法ですクラス)?Pythonでデフォルト以外の引数としてクラス変数を使用する
例:
class a:
def __init__(self):
self.__variable = 6
def b(self, value = self.__variable):
print value
は、クラス内にプライベートクラス変数を保持し、それをデフォルト以外の変数のデフォルト値として使用する方法ですクラス)?Pythonでデフォルト以外の引数としてクラス変数を使用する
例:
class a:
def __init__(self):
self.__variable = 6
def b(self, value = self.__variable):
print value
あなたは、問題をoverthinkingしている:
class a:
def __init__(self):
self.__variable = 6
def b(self, value=None):
if value is None:
value = self.__variable
print value
うわー。失敗した。ありがとう! – calccrypto
self.__variable
はインスタンス変数ではなく、クラス変数です。None
をデフォルトと機能本体にif arg is None: arg = real_default
を追加し、作業を行います)。それでは、**は意図された用途ですか? –
@Karl:サブクラスで名前の衝突を防ぐ。例えば、 http://docs.python.org/reference/lexical_analysis.html#reserved-classes-of-identifiersまたはhttp://docs.python.org/tutorial/classes.html?highlight=mangling#private-variables(3番目の段落)。 – delnan
私は1つのサブスコープしか使わない場合でも変数にアクセスできます – calccrypto
None
が許容される引数の範囲内になるようにするには、コード内の他の目的に使用されないカスタムセンチネル値を作成することができます。これを行わないとvalue
、None
はb
から返されることはありません。
UseDefault = object()
# Python 3? Otherwise, you should inherit from object unless you explicitly
# know otherwise.
class a:
def __init__(self):
self._variable = 6
def b(self, value=UseDefault):
if value is UseDefault:
value = self._variable
print value
は今None
はPythonが** **プライベートクラス変数を持っていない
をused.'されるデフォルトを起こすことなく、
b
に渡すことができます。まったく。あなたが使用している二重のアンダースコアは変数を非公開にしない**、ネームの衝突を避けるために名前を変更するだけです。 理由が分からない限り、二重下線は使用しないでください。 ;) –大きな質問! (まあ、それは私が持っていたので、大きな問題を解決した...) – nchpmn