【问题标题】:Python @dataclass Inheritance of Public Variables without double initializationPython @dataclass 无需双重初始化即可继承公共变量
【发布时间】:2020-06-11 00:16:29
【问题描述】:

想要写入一个类中的变量,然后在另一个类中继承这些设置的变量值,而无需再次设置值。

下面的代码应该打印 100,而不必为子类实例再次初始化值;想要使用主类(数据处理程序)中的原始设置值。

一个班级管理所有收入数据;数据处理程序,然后其他类简单地继承这些值。处理这种流结构的方法是什么?请,谢谢!

from dataclasses import dataclass


@dataclass
class Datahandler: 


    A : int
    B : int
    C : int
    D : int
    E : int
    F : int     



Datahandler=Datahandler(100,100,50,40,10,1000)    




class Some_Class(Datahandler):       

    pass


print(Some_Class.A)

【问题讨论】:

  • 这不是继承的用途。你是从一个实例继承的,而不是一个类,这只是坏了

标签: python-3.x python-dataclasses data-class


【解决方案1】:

要定义类的属性,请在类定义中分配给它,而不是在任何函数中。

class Datahandler: 
    staticmember = 200

dataclass 类不会帮助您。它用于定义类instances 的属性,而不是类。

然后您可以访问派生类中的基类成员,这就是您想要做的。

class Some_Class(Datahandler):       
    pass

print(Some_Class.staticmember)

此外,您应该避免为类和该类的实例使用相同的名称。

Datahandler=Datahandler(100,100,50,40,10,1000) #Likely problematic

编辑:虽然我回答了发布的问题,但正如@juanpa.arrivillaga 所建议的那样,有更简单的方法可以在不使用继承的情况下做同样的事情。

【讨论】:

  • 谢谢,但我的问题有点不同:想要在 Datahandler 中初始化一次值(来自数据源);但随后在 Some_Class 中使用它们而无需再次初始化,只需继承它们即可。
  • 只是你只知道在运行时存储在 Datahandler 中的值,而不是在编译时?如果是这样,您可以将已知的值存储在 Datahandler 中:Datahandler.staticmember = whatever。如果有其他区别,请解释。
猜你喜欢
  • 2017-05-06
  • 2020-07-30
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多