【问题标题】:Write attribute to scope above current one将属性写入当前范围之上
【发布时间】:2014-05-26 09:49:53
【问题描述】:

我想知道是否有办法以编程方式将属性写入运行函数的父类的类。我正在寻找类似以下的东西。

def add_items():
    setattr(ParentClass, 'foo', 'bar')

class A(object):
    add_items()

class B(object):
    add_items()


a = A()
b = B()
print a.foo
"bar"
print b.foo
"bar"

【问题讨论】:

  • AFAIK 没有直接的方法可以做到这一点。您可以尝试使用inspect 模块,但它会给出的最有趣(在您的情况下)信息是调用者对象的名称(AB
  • 我不确定你想要什么。但是,如果您只想自定义类创建(例如,在创建类时将属性写入类),则可以使用元类而不是函数调用。 docs.python.org/2/reference/…

标签: python oop closures


【解决方案1】:

我不清楚你在追求什么。这里有两次尝试回答您的问题。

您可以制作一个装饰器,为类添加属性:

def add_items(cls):
    cls.foo = "bar"
    return cls

@add_items
class A(object):
    pass

另一方面,如果你的函数是一个方法,它可以为类实例添加任何它想要的属性:

class B(object):
    def add_items(self):
        self.foo = 'Baz'

b = B()
b.add_items()

【讨论】:

  • 我猜这不是 OP 想要的,因为他询问范围
  • 装饰器是我正在寻找的最佳答案谢谢!
猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多