【问题标题】:Pass 'file name' as argument to a class in "python 3"将“文件名”作为参数传递给“python 3”中的类
【发布时间】:2020-06-07 16:19:06
【问题描述】:

读取日志文件的标题(许多文件的通用标题)。创建了一个类并从另一个文件调用它的对象。标头类返回标头值的字典。

如何将整个文件作为参数从子类传递给头类?

儿童班:

class fileLog(object):
   def __init__(self):
    try:
        # File path 
        filePath = "C:\FileLog1.log"
        file = open(filePath, "rb")

        with file:
            self.fetchHeader(file)

    finally:
        file.close()

# This method fetches the header information            
def getHeader(self, file):

    '''
        Get header information from header class

    '''
    header = HeaderInfo(file)

    header_dict = header.Fetch_Data()
    ....
    ....

头信息类:

class HeaderInfo(dict):
def __init__(self, fileName):
    header_dict = defaultdict(list)


    print(type(fileName))
    # self._object = self.file
    self._fileName = fileName
    file = open(self._fileName, "rb")

    self._dict = {}     
    ....
    ....

def Get_Data(self):
    return self._dict


hi = HeaderInfo('**** what to pass here ? ****')

if __name__ == '__main__':
    hi.Fetch_Data('** what to pass here ? **')

我不想在头信息类中硬编码文件名,因为多个文件可以使用同一个类并且必须动态传递文件。

错误:

TypeError: init() 缺少 1 个必需的位置参数:'fileName'

我知道我没有传递文件名,但是如何处理 HeaderInfo 类中的文件名

【问题讨论】:

    标签: python-3.x class parameter-passing


    【解决方案1】:
    hi = HeaderInfo('pass file name here')
    

    实际上错误表明,init方法有文件名作为参数,如果你像hi=HeaderInfo()一样调用,它会抛出一个错误,比如TypeError:init()缺少1个必需的位置参数: 'fileName',所以在为类创建对象时传递文件名

    【讨论】:

    • header = HeaderInfo(file) 从子类调用,甚至在头类中,这也是 init 调用: def init__(self, fileName) : 但是,如果这样调用对象呢? hi = HeaderInfo(fileName) if __name == 'main': hi.Get_Data(fileName) NameError: name 'fileName' is not defined
    • 你需要定义文件名,否则像'test.log'一样直接传递文件名
    • 在 headerclass 或子类中直接传递文件名,如“test.log”?因为,我想从子类中获取文件名,并且在 headerclass 中没有硬编码...
    • @user301016 是否要将文件名动态传递为头类?
    • 是的,因为这个头类应该从多个python脚本中调用,所以每次调用头类(所有输入文件的头结构都相同),都应该传递相应的输入文件从子类并根据传递的输入文件,头类具有获取数据的方法。对不起,如果我让你感到困惑
    猜你喜欢
    • 2022-01-23
    • 2019-03-02
    • 2011-07-06
    • 2014-03-23
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    相关资源
    最近更新 更多