如何获得修饰属性方法的方法名称?

时间:2018-08-17 14:45:08

标签: python

让我们说我有一个用@property装饰的方法。

有没有办法获得装饰方法的基础名称?

例如,当属性没有__name__属性时,如何打印属性名称?

我正在尝试进行RPC调用,并且所有方法均适用于方法和静态函数,但并非如此。

3 个答案:

答案 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__

如果您的问题中有装饰器的示例代码,我可以更精确地显示如何执行此操作...