【问题标题】:How to get the method name of a decorated property method?如何获取修饰属性方法的方法名称?
【发布时间】:2018-08-17 14:45:08
【问题描述】:

假设我有一个用@property 装饰的方法。

有没有办法获得装饰方法的底层名称?

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

我正在尝试进行 RPC 调用,一切都适用于方法和静态函数,但不是这个。

【问题讨论】:

  • @property修饰的方法名不总是和属性本身的名字一样吗?
  • 可以,但它没有像__name__ 这样的属性。

标签: python


【解决方案1】:

属性具有以下属性:fgetfsetfdel,它们是对 getter/setter/deleter 函数的引用。

所以,你可以得到每个函数的__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'

【讨论】:

    【解决方案2】:

    我认为如果使用装饰器@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)
    

    【讨论】:

      【解决方案3】:

      如果您在装饰器中使用functools.wraps(),则装饰函数具有包装函数的__name__

      如果您的问题中有一些装饰器的示例代码,我可以更准确地展示如何做到这一点...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-27
        • 1970-01-01
        • 2010-09-06
        • 2013-09-02
        • 1970-01-01
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多