Python 在_init中修改父类属性__
我想为文件/字符串转换器建立面向对象的模型。 我设法用函数式方法解决了这个问题,但它只需要面向对象编程 情况如下: 我要转换的输入数据是一个常用字典列表,但具有不同的值(从CSV文件转储) 我需要更新类A中的Python 在_init中修改父类属性__,python,Python,我想为文件/字符串转换器建立面向对象的模型。 我设法用函数式方法解决了这个问题,但它只需要面向对象编程 情况如下: 我要转换的输入数据是一个常用字典列表,但具有不同的值(从CSV文件转储) 我需要更新类A中的data3的值,该值隐藏在列表(fileHeader)中,该列表在A的\uuuuu init\uuu方法中初始化 class Common(object) def __init__(self, c): # for now c will be a dictionary that we
data3
的值,该值隐藏在列表(fileHeader
)中,该列表在A的\uuuuu init\uuu
方法中初始化
class Common(object)
def __init__(self, c): # for now c will be a dictionary that we iterate over in external loop
self.c = c
def printdata(self, obj): # method used for printing (writting to a file in future)
print ''.join(obj)
我的实际行为是:
fileHeader=['data1','data2','data3']
fileFooter=['data4','data1','data2','data3','data5']
所需的行为是得到修改data3='data3\u修改'
:
fileHeader-无更改
fileFooter=['data4','data1','data2','data3\u-modified','data5']
请注意,我已忽略“”。可读性属性的join()结果不“属于”层次结构中的类。它们属于当前对象,该对象是B的实例,但继承自A和Common;在这些类的代码中定义的每个属性都可以直接在A上使用。这是子类化的基础
因此,您可以在
B中访问self.data3
。\uuuu init\uuu
代码或其他任何地方。您听说过super
?您尝试过self.data3=…
?@AndreaCorbelliniself.data3=…
在B类范围内更改其本地属性,但我想做的是使用修改后的属性(fileHeader)在类B(fileFooter)中的类A的实例。@Mrv:我认为您在类和这些类的实例之间制造了一些混淆。你能提供预期的行为/结果吗?@AndreaCorbellini当然可以,假设文件头看起来像['data1','data2','data3']
我想让文件尾像那样['data4','data1','data2','data3_-modified','data5']
甚至更好地包括“”。加入结果:['data4','data1data2data3_modified','data5']
我想,访问self.data3
不是问题,这很好,可以随时更改。问题在于访问self.fileHeader,其中包含一个data3值。因此,当我执行'a.\u init_u_;(self,c)`在B类中,我现在使用错误的data3
值访问fileHeader。我想更改它的值,并在修改后的fileFooter中使用它。我在上面的评论中描述了预期的行为。
class A(Common): # creates file header
def __init__(self, c): #c is a dict
self.c = c
__data1 = 'data1'
self.__data2 = 'data2'
self.data3 = 'data3'
self.fileHeader = [__data1, __data2, self.__data3] # contains data3 value that i want to modify in Class B
class B(A): # creates file footer, need to use modified fileHeader value
def __init__(self, c):
A.__init__(self, c) # gives me access to self.fileHeader
## magically change fileHeader's value updateing data3##
data4 = 'data4'
data5 = 'data5'
....
self.fileFooter = [data4, ''.join(self.fileHeader), data5] # refering fileHeader here gives me original 'data3' value