Python:打印基类变量

标签 python inheritance vhdl code-generation system-verilog

我正在使用库在 C++、VHDL 和 SystemVerilog 之间共享数据。它使用代码生成器来构建包含适当字段的数据结构。想想一个 c 类型的数据结构。我想生成包含数据结构和读/写函数的 python 代码,以设置数据结构的内容并将其从/写入文件。

为此,我正在尝试编写一个程序,打印基类中的所有变量以及子类的更新,但不包含子类变量。

A 类是实际的 VHDL/SystemVerilog/C++ 记录/结构,B 类包含在 A 类中进行处理和生成值的逻辑。

例如:

class A(object):
    def __init__(self):
        self.asd = "Test string"
        self.foo = 123

    def write(self):
        print self.__dict__

class B(A):
    def __init__(self):
        A.__init__(self)
        self.bar = 456
        self.foo += 1

    def write(self):
        super(B, self).write()

调用 B.write() 应该产生以下结果:(注意 foo 的增量值)

"asd: Test String, foo: 124"

但是它产生了

"asd: Test String, bar: 456, foo: 124".

有没有办法只获取基类变量?我可以将基础字典与子类字典进行比较,并只打印出现在两者中的值,但这并不是一种干净的方式。

最佳答案

基类变量和子类变量没有区别。根据定义,继承是一种 is-a 关系;基类中定义的所有内容都如同在子类中定义的一样。

类似地,您在代码中任何其他点在实例上定义的任何内容也将出现在字典中; Python 不限制您在类的其他地方甚至从外部添加新的实例变量。

做你想做的事情的唯一方法是在你输入 A.__init__ 时记录这些键。

关于Python:打印基类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33648867/

相关文章:

casting - VHDL 转换错误

compilation - 请帮我解决 VHDL 编译错误

python - mypy 可以跟踪字符串文字吗?

python - 将特定列添加到单行列表(可能有点基础)

python - 根据不同的 DataFrame 更新 pandas DataFrame

Angular 组件继承

javascript - 属性复制到继承类型的目的

python - 非阻塞 Redis pubsub 可能吗?

java - 流畅的语法和继承

vhdl - 简单状态机问题