我的印象是python字符串格式化使用.format()会正确使用属性,而是我得到一个字符串格式的对象的默认行为:
>>> def get(): return "Blah"
>>> a = property(get)
>>> "{a}!".format(a=a)
'<property object at 0x221df18>!'
这是预期的行为,如果是这样的话,什么是实现属性的特殊行为的好方法(例如,上面的测试会返回“Blah!”)?
答案 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()?