5

私は、.format()を使用したPython文字列フォーマットがプロパティを正しく使用するという印象を受けました。代わりに、文字列フォーマットされているオブジェクトのデフォルトの動作を取得します。

>>> def get(): return "Blah"
>>> a = property(get)
>>> "{a}!".format(a=a)
'<property object at 0x221df18>!'

これは意図された動作ですか?もしそうなら、プロパティの特別な動作を実装するための良い方法は何ですか(たとえば、上記のテストは代わりに「Blah!」を返します)?

4

3 に答える 3

9

propertyオブジェクトは記述子です。そのため、クラスを介してアクセスしない限り、特別な能力はありません。

何かのようなもの:

class Foo(object):
     @property
     def blah(self):
         return "Cheddar Cheese!"

a = Foo()
print('{a.blah}'.format(a=a))

動作するはずです。(Cheddar Cheese!印刷されたものが表示されます)

于 2013-03-11T20:35:36.673 に答える
1

Pythonプロパティは.format()とうまく相互運用します。次の例を考えてみましょう。

>>> class Example(object):
...     def __init__(self):
...             self._x = 'Blah'
...     def getx(self): return self._x
...     def setx(self, value): self._x = value
...     def delx(self): del self._x
...     x = property(getx,setx,delx, "I'm the 'x' property.")
...
>>>
>>> ex = Example()
>>> ex.x
'Blah'
>>> print(ex.x)
'Blah'
>>> "{x.x}!".format(x=ex)
'Blah!'

私はあなたの問題はあなたの財産がクラスの一部ではないことに起因すると信じています。.format()で機能していないプロパティを実際にどのように使用していますか?

于 2013-03-11T21:00:26.800 に答える
1

はい、これは基本的にあなたがやったのと同じです:

>>> def get(): return "Blah"
>>> a = property(get)
>>> print a

"Blah"関数を呼び出すだけの場合:

>>> def get(): return "Blah"
>>> a = property(get)
>>> "{a}!".format(a=a.fget())
于 2013-03-11T20:35:16.830 に答える