使用OOP输出错误

时间:2018-03-14 20:12:39

标签: python python-3.x oop

我在代码中找不到错误。我正在使用ColHe类,它是Header类型的对象的集合,主要目标是读取文件的标题并获取包含它的元素的列表。

这是我的Header课程:

class Header:
    def __init__(self, col):
        self._day = 'Day:'
        self._date = col[1]
        self._time = 'Time:'
        self._hours = col[3]
        self._company = 'Company:'
        self._name = 'NSHF'

    def __str__(self):
        return str(self._day + self._date + ", " + self._time + self._hours
                     + ", " + self._company + self._name)

以及getter和setter的方法。这是我的ColHe课程:

from collections import UserList
from copy import deepcopy
import constants
from Header import Header

class ColHe(UserList):
    def __init__(self, file_name):
        super().__init__()
        in_file=open(file_name)
        for i in range(constants.HEADER):
                self.append(Header((in_file.readline().strip())))
        in_file.close()

    def getData(self):
        return deepcopy(self)

    def __str__(self):
        st = ""
        for he in self:
            st+=str(he)
        return st

其中constants.Header等于6。 我用以下方式运行程序:

a=ColHe("file.txt")
print(a.getData())

并将此作为输出:

Day:a, Time::, Company:NSHFDay:6, Time:1, Company:NSHFDay:i, Time:e, Company:NSHFDay:4, Time:5, Company:NSHFDay:o, Time:p, Company:NSHFDay:S, Time:F, Company:NSHF

然而,我正在寻找的输出看起来更像是这样:

["Day:", self._date, "Time:", self._time, "Company:", "NSHF"]

文件内容的一个例子是:

Day:
06:11:2017
Time:
14:55
Company:
NSHF

2 个答案:

答案 0 :(得分:1)

当你在python中打印某些东西时,你不打印存储它的名称,你打印它的。 IE:

print(self._date) # print whatever is stored in _date
print("self._date") # print the static string 'self._date'

没有合理的方式从您演示的输入中获得所需的输出。您误解了关于什么值,存储位置以及引用它们时会发生什么的核心概念。

答案 1 :(得分:0)

使用str.format(如果你的代码只是python 3.6+,则使用f-strings)

def __str__(self):
    return 'Day:\n{self._day}\nTime:\n{self._time}\nCompany:\n{self._company}'.format(self=self)