3

他の値が提供されていない場合にクラス変数を使用したいクラスメソッドを書いています

def transform_point(self, x=self.x, y=self.y):

しかし...それはうまくいかないようです:

NameError: name 'self' is not defined

これを行うにはもっと賢い方法があると感じています。あなたならどうしますか?

4

2 に答える 2

5

センチネル値を使用してから、それらを目的のインスタンス属性に置き換える必要があります。None良いオプションです:

def transform_point(self, x=None, y=None):
    if x is None:
        x = self.x
    if y is None:
        y = self.y

関数シグネチャは1 回だけ実行されることに注意してください。デフォルト値に式を使用することはできず、関数を呼び出すたびに値が変化することを期待できません。

またはを設定できる必要ある場合は、代わりに別の一意のシングルトン値をデフォルトとして使用する必要があります。のインスタンスを使用することは、通常、その場合の優れたセンチネルです。xyNoneobject()

_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)

于 2013-03-07T12:08:10.103 に答える
2
def transform_point(self, x=None, y=None):
    if x is None:
        x = self.x
    if y is None:
        y = self.y

于 2013-03-07T12:07:17.720 に答える