Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在_init中修改父类属性___Python - Fatal编程技术网

Python 在_init中修改父类属性__

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

我想为文件/字符串转换器建立面向对象的模型。 我设法用函数式方法解决了这个问题,但它只需要面向对象编程

情况如下:

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

我需要更新类A中的
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=…
?@AndreaCorbellini
self.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