擅长:python、mysql、java
<p>我目前也面临同样的问题,并试图找到解决办法。
<a href="https://stackoverflow.com/a/43633293/4960953">@Jean-François Fabre♦</a>的答案不能解决我自己的问题—它在初始化子类时冻结了参数值,如果它将来发生变化,您的子类永远不会知道它。你知道吗</p>
<p>我做了一些修改来修复它:</p>
<pre><code>class Parent(object):
def __init__(self, id, name):
self.id = id
self.name = name
self.__parent_vars = ['id', 'name'] # make a copy
def print_values(self):
res = {}
for el in self.__parent_vars:
res[el] = vars(self)[el]
return res
class Child(Parent):
def __init__(self, id, name, last_name, age):
Parent.__init__(self, id, name)
self.last_name = last_name
self.age = age
</code></pre>
<p>让我们测试一下:</p>
<pre><code>c = Child(12,"Foo","whatever",34)
res1 = c.print_values()
print(res1)
c.id = 24
res2 = c.print_values()
print(res2)
</code></pre>
<p>输出:</p>
<pre><code>{'id': 12, 'name': 'Foo'}
{'id': 24, 'name': 'Foo'}
</code></pre>
<p>现在它可以像我预期的那样工作,但是我需要为它创建额外的变量。例如,如果我想pickle,我的类也会pickle这个我不需要的额外变量。<strong>是否可以在不创建额外变量的情况下执行相同的操作?</strong></p>