Python属性和字符串格式

时间:2013-03-11 20:33:30

标签: python string properties formatting

我的印象是python字符串格式化使用.format()会正确使用属性,而是我得到一个字符串格式的对象的默认行为:

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

这是预期的行为,如果是这样的话,什么是实现属性的特殊行为的好方法(例如,上面的测试会返回“Blah!”)?

3 个答案:

答案 0 :(得分:6)

property个对象是描述符。因此,除非通过课堂访问,否则他们没有任何特殊能力。

类似的东西:

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

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

应该有效。 (你会看到Cheddar Cheese!打印)

答案 1 :(得分:1)

是的,这与你刚刚做的基本相同:

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

如果你想"Blah"只需要调用函数:

>>> def get(): return "Blah"
>>> a = property(get)
>>> "{a}!".format(a=a.fget())

答案 2 :(得分: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()?