我的班级结构如下:
class Parent(object):
def __init__(self, id, name):
self.id = id
self.name = name
def print_vars(self):
print(vars(self))
class Child(Parent):
def __init__(self, id, name, last_name, age):
Parent.__init__(self, id, name)
self.last_name = last_name
self.age = age
class AnotherChild(Parent):
def __init__(self, id, name, address):
Parent.__init__(self, id, name)
self.address= address
也许不是最好的例子,但我希望能有足够的机会让大家理解这个想法。我的想法是初始化两个独立的实例,它们共享一些共同的属性和方法。我需要能够将这两个对象转储到一些json和csv文件中,这是我希望通过方法dump_to_file
(在本例中被print_vars
替换)实现的。现在,当我必须将父类和子类的所有属性都转储到单个文件时,这个方法工作得很好。但是,我只想从父类转储属性。我试图用super
或super(Parent, self)
来代替self
,但没有成功。只有才能从编写代码的类中访问属性的最佳方法是什么?你知道吗
我相信Java会自动做到这一点,因为方法是在父类中定义的,父类不知道子类属性。你知道吗
假设您不打算在
__init__
之外添加更多变量,可以冻结父级的__init__
方法中的变量列表:然后使用这个字典,它只包含初始化父类时定义的变量:
测试:
我得到:
我目前也面临同样的问题,并试图找到解决办法。 @Jean-François Fabre♦的答案不能解决我自己的问题—它在初始化子类时冻结了参数值,如果它将来发生变化,您的子类永远不会知道它。你知道吗
我做了一些修改来修复它:
让我们测试一下:
输出:
现在它可以像我预期的那样工作,但是我需要为它创建额外的变量。例如,如果我想pickle,我的类也会pickle这个我不需要的额外变量。是否可以在不创建额外变量的情况下执行相同的操作?
相关问题 更多 >
编程相关推荐