Python调用@property装饰方法报错'property' object is not callable如何解决
问题原因
@property 是Python专为类实例方法设计的装饰器,作用是将方法转换为无需括号调用的实例属性,不能直接用于装饰全局独立函数。你给普通函数加上该装饰器后,原函数会被封装为property实例对象,自然无法直接作为函数调用。
可行解决方案
方案1:直接调用property封装的原始函数(保留现有全局函数写法)
property实例的fget属性会存储被装饰的原始函数,直接调用该属性即可:
print(Inverted_string.fget("123")) # 输出结果:321
也可以手动触发property的取值魔法方法,效果一致:
print(Inverted_string.__get__(None, object)("123"))
方案2:调整为@property的标准使用姿势(推荐,符合Python语法规范)
@property本来就是为类属性场景设计的,将方法迁移到类中即可按属性方式取值:
class StringProcessor: def __init__(self, input_str): self.input_str = input_str @property def Inverted_string(self): return self.input_str[::-1] # 调用时无需加括号,符合property设计初衷 processor = StringProcessor("123") print(processor.Inverted_string) # 输出结果:321
内容的提问来源于stack exchange,提问作者Bakkune
相关产品推荐
相关产品推荐

