他の値が提供されていない場合にクラス変数を使用したいクラスメソッドを書いています
def transform_point(self, x=self.x, y=self.y):
しかし...それはうまくいかないようです:
NameError: name 'self' is not defined
これを行うにはもっと賢い方法があると感じています。あなたならどうしますか?
他の値が提供されていない場合にクラス変数を使用したいクラスメソッドを書いています
def transform_point(self, x=self.x, y=self.y):
しかし...それはうまくいかないようです:
NameError: name 'self' is not defined
これを行うにはもっと賢い方法があると感じています。あなたならどうしますか?
センチネル値を使用してから、それらを目的のインスタンス属性に置き換える必要があります。None
良いオプションです:
def transform_point(self, x=None, y=None):
if x is None:
x = self.x
if y is None:
y = self.y
関数シグネチャは1 回だけ実行されることに注意してください。デフォルト値に式を使用することはできず、関数を呼び出すたびに値が変化することを期待できません。
またはを設定できる必要がある場合は、代わりに別の一意のシングルトン値をデフォルトとして使用する必要があります。のインスタンスを使用することは、通常、その場合の優れたセンチネルです。x
y
None
object()
_sentinel = object()
def transform_point(self, x=_sentinel, y=_sentinel):
if x is _sentinel:
x = self.x
if y is _sentinel:
y = self.y
そして今、あなたも電話することができます.transform_point(None, None)
。
def transform_point(self, x=None, y=None):
if x is None:
x = self.x
if y is None:
y = self.y
等