【问题标题】:Property method without class [duplicate]没有类的属性方法[重复]
【发布时间】:2013-06-05 03:57:06
【问题描述】:

我有下一个代码

global_variable = 1

@property
def method():
    # Some magic, for example 
    # incrementing global variable
    global global_variable
    global_variable += 1
    return global_variable

print method

此代码返回

<property object at 0x28dedb8>

但我希望 2. 在 python 中是否可以在类之外使用属性装饰器?

【问题讨论】:

    标签: python class properties


    【解决方案1】:

    @propertiesinstance 属性,在类中定义。例如:

    class A(object):
       @property
       def a(self):
          return 2
    
    b = A()
    b.a
    => 2
    

    如果我理解,您正在尝试定义模块属性(或“全局”属性)。没有简单/干净的方法可以做到这一点。见this related question

    编辑:您还可以定义classproperty,以使您的属性更像全局(不需要实例)。 classproperty 不是内置的,但很容易定义。这是定义它的一种方法:

    class classproperty(object):
        def __init__(self, f):
            self.f = classmethod(f)
        def __get__(self, *a):
            return self.f.__get__(*a)()
    

    现在你可以这样做了:

    class A(object):
       @classproperty
       def a(self):
          return 2
    
    A.a
    => 2
    

    【讨论】:

    • 有这个类属性装饰器的pip包吗?
    • @igor,我不知道。您可以简单地复制粘贴它。它只有 5 行。
    【解决方案2】:

    观察以下代码:

    @property
    def f():
        return 1
    
    print f
    
    class a(object):
        @property
        def f(self):
            return 2
    
    print a.f
    b = a()
    print b.f
    

    输出:

    <property object at 0x7f892bfb11b0>
    <property object at 0x7f892bfb1208>
    2
    

    @property 仅适用于已实例化的类对象。

    【讨论】:

      猜你喜欢
      • 2013-08-06
      • 2019-03-11
      • 1970-01-01
      • 2012-01-25
      • 2016-04-24
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多