【发布时间】:2020-02-14 10:40:24
【问题描述】:
我想用一个接受可选参数的装饰器创建一个类属性。通常我会写
def MyProperty(func, optional=None):
def getter():
"""magic goes here"""
return func() if not optional else optional(func())
return property(getter)
class MyClass(object):
@MyProperty
def myFunction(foo):
return foo
MyClass().myFunction(5.)
>>> 5.0
这一切都很好,但是当我现在也像这样沿着装饰器传递一个函数时:
class MyClass(object):
@MyProperty(int)
def myFunction(foo):
return foo
我现在打电话
MyClass().myFunction(5)
>>> TypeError: 'property' object is not callable
虽然我希望得到int(5) 作为结果。
【问题讨论】:
-
你如何定义@MyProperty?
标签: python properties attributes decorator python-2.x