首页 > 解决方案 > 使用装饰器或元类为所有类设置公共实例变量

问题描述

我有一个使用参数 id、name、email、ticket 初始化 A 类的场景。然后在类 A 的方法中初始化类 B,并且需要传递相同的参数,依此类推。可以在类声明期间使用装饰器或元类设置这些公共属性吗?

class A:
  def __init__(self, id, name,  email, ticket):
       self.id = id
       self.name=name
       self.email=email
       self.ticket=ticket

  def __somefunc(self):
       # do something
        b = B(self.id, self.name, self.email, self.ticket)
        b.__dosomething()

同样......类C等等......我发现将所有这些重复的参数发送到所有后续类有点不合适。

标签: pythonpython-3.xmetaprogramming

解决方案


如果您只是想减少键入的字符数(出现在代码中),请制作这些值的字典并用它实例化其他类。

Class A:
  def __init__(self, id, name,  email, ticket):
       self.id = id
       self.name=name
       self.email=email
       self.ticket=ticket
       self.params = {'id':id, 'name':name,  'email':email, 'ticket':ticket} 

  def __somefunc(self):
       # do something
        b = B(**self.params)
        b.__dosomething()

Can these common attributes be set using a decorator or metaclass during class declaration.? 是的,可能。


推荐阅读