在__init__中修改父类属性

时间:2016-01-04 11:43:52

标签: python

我想为文件/字符串转换器构建面向对象的模型。 我设法使用功能方法解决了这个问题,但它只是求助于OOP。

情况如下:

我要转换的输入数据是常用字典列表,但具有不同的值(从CSV文件转储)。

我需要更新A类中data3的值,该值隐藏在A&#39 {s} fileHeader方法中初始化的列表(__init__)内。

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)

 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

实际行为是我得到的:
fileHeader = ['data1', 'data2', 'data3']
fileFooter = ['data4','data1', 'data2', 'data3', 'data5' ]

期望的行为是修改 data3='data3_modified'
fileHeader - no changes
fileFooter = ['data4','data1', 'data2, 'data3_modified', 'data5' ]

请注意,为了便于阅读,我忽略了' .join()结果

1 个答案:

答案 0 :(得分:0)

属性不属于"属于"到层次结构中的类。它们属于当前对象,它是B的一个实例,但是继承自A和Common;在这些类的代码中定义的每个属性都是直接在A上可用。这是关于子类化的基本要素。

因此,您只需访问self.data3代码或其他任何地方的B.__init__即可。