让我们说我有一个用@property
装饰的方法。
有没有办法获得装饰方法的基础名称?
例如,当属性没有__name__
属性时,如何打印属性名称?
我正在尝试进行RPC调用,并且所有方法均适用于方法和静态函数,但并非如此。
答案 0 :(得分:2)
属性具有以下属性: fget , fset 和 fdel ,它们是对getter / setter / deleter函数的引用。 / p>
因此,您可以获得每个功能的__name__
(如果不是None
)
演示:
class Thing(object):
@property
def foo(self):
return "foo"
def get_baz(self):
return "baz"
bar = property(get_baz)
>>> Thing.foo.fget.__name__
'foo'
>>> Thing.bar.fget.__name__
'get_baz'
答案 1 :(得分:-1)
我认为如果使用decorator @property,则可以使用函数名称访问函数,并且可以提供返回值。
class Foo:
value = 'Foo'
def setName(self, name):
self.value = name
@property
def name(self):
return "You name is: {}".format(self.value)
foo = Foo()
print(foo.name)
foo.setName('Bar')
print(foo.name)
答案 2 :(得分:-1)
如果在装饰器中使用functools.wraps()
,则装饰的函数 将具有包装函数的__name__
。
如果您的问题中有装饰器的示例代码,我可以更精确地显示如何执行此操作...