我想为文件/字符串转换器构建面向对象的模型。 我设法使用功能方法解决了这个问题,但它只是求助于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()结果
答案 0 :(得分:0)
属性不属于"属于"到层次结构中的类。它们属于当前对象,它是B的一个实例,但是继承自A和Common;在这些类的代码中定义的每个属性都是直接在A上可用。这是关于子类化的基本要素。
因此,您只需访问self.data3
代码或其他任何地方的B.__init__
即可。