【问题标题】:Call multiple attributes from one class into another - Python将一个类中的多个属性调用到另一个类中 - Python
【发布时间】:2021-04-14 17:19:43
【问题描述】:

我正在处理共享一些初始公共变量/属性的多个类。为了使其更干净并避免多次调用相同的变量,我想将它们全部设置在初始类中(例如classA),然后将所有这些属性加载到classB中。

所以我会定义:

class classA:
   def __init__(self, varA, varB, varC, ..., varZ):
      self.varA = varA
      self.varB = varB
      self.varC = varC
      (...)
      self.varZ = varZ

然后再加载它classB

class classB:
   def __init__(self, classA):
      self.varA = classA.varA
      self.varB = classA.varB
      self.varC = classA.varC
      (...)
      self.varZ = classA.varZ

有没有更好的方法来实现这一点,而无需遍历所有单独的属性?

【问题讨论】:

  • class classB(classA)?
  • 如果classB 完全派生自classA,您可以像Rakesh 建议的那样从A 继承B。如果它只共享一些属性,你可以有一个公共基类 classCommon 并让 classAclassB 从那个继承
  • 我可能是错的,但据我了解,通过继承我必须在调用classB时再次输入所有变量,而不是在脚本中调用classB(classA)

标签: python python-3.x class attributes


【解决方案1】:

您可以使用argument unpacking 和继承:

class A:
    def __init__(self, *args, **kwargs):
        for k, v in kwargs.items():
            setattr(self, k, v)


class B(A):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)


data = {'varA': 'a', 'varB': 'b', 'varC': 'c'}
a = A(**data)
b = B(**data)

print(a.varB == b.varB)

输出:

True

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2015-12-19
    相关资源
    最近更新 更多