1. ホーム
  2. python

Pythonです。プロパティゲッターに複数の引数を渡すには?

2023-08-18 12:36:49

質問

次のような例を考えてみましょう。

class A:
    @property
    def x(self): return 5

で、当然ながら a = A(); a.x を呼び出すと 5

しかし、プロパティxを変更できるようにしたいと想像してください。

このように、例えば

class A:
    @property
    def x(self, neg = False): return 5 if not neg else -5

で呼び出し a = A(); a.x(neg=True)

これはTypeErrorを発生させます。 'int' object is not callable が発生しますが、これはごく普通のことで、私たちの x は次のように評価されます。 5 .

そこで、プロパティゲッターに複数の引数を渡すことが可能であれば、その方法を知りたいと思います。

どのように解決するのですか?

注意点として があります。 を使用する必要があります。 property をデコレータとして使用します。昔ながらの方法で、プロパティに加えて個々のメソッドを公開することも十分に可能です。

class A:
    def get_x(self, neg=False):
        return -5 if neg else 5
    x = property(get_x)

>>> a = A()
>>> a.x
5
>>> a.get_x()
5
>>> a.get_x(True)
-5

これは、あなたがそれを使って何をしようとしているかに応じて、良いアイデアかもしれませんし、そうでないかもしれません(しかし、私がレビューしているコードでこのパターンに遭遇した場合、コメントで優れた正当性を見ることを期待します)。