从具有错误属性类型的 txt 文件创建的对象?

Posted

技术标签:

【中文标题】从具有错误属性类型的 txt 文件创建的对象?【英文标题】:Objects being created from a txt file with the wrong attribute types? 【发布时间】:2022-01-19 16:07:52 【问题描述】:

我有一个格式化的 txt 文件 (P001, Part001, 10.0, 100 OR AP002, AssembledPart2, 130, 1, P002, P004) 正在逐行读取,每一行都被创建为一个对象。这一切似乎工作正常,但所有属性都设置为 str,我需要其中一些是 float 或 int。我不知道为什么会这样。

def readParts(self, file):
    '''Reads the parts.txt file and runs it line by line thru part.__init__ and adds to parts list
    '''
    id = None
    name = None
    price = 0.0
    onhandqty = int
    componentID1 = None
    componentID2 = None
    with open(os.path.join(sys.path[0],"parts.txt"), "r") as file:
        for line in file:
            row = line.split(",")
            if len(row) == 4:
                id, name, price, onhandqty = [i.strip() for i in row]
                part = Part(id, name, price, onhandqty)
                WarehouseManager.parts.append(part)
            if len(row) == 6:
                id, name, price, onhandqty, componentID1, componentID2 = [i.strip() for i in row]
                assembledpart = AssembledPart(id, name, price, onhandqty, componentID1, componentID2)
                WarehouseManager.parts.append(assembledpart)

作为参考,类 init

class Part():

    id = None

    name = None

    price = 0.0

    onhandqty = int



    def __init__(self, id, name, price, onhandqty):
        self.id = id
        self.name = name
        self.price = price
        self.onhandqty = onhandqty
class AssembledPart(Part):
    

    componentID1 = None

    componentID2 = None



    def __init__(self, id, name, price, onhandqty, componentID1, componentID2):
        super().__init__(id, name, price, onhandqty)
        self.componentID1 = componentID1
        self.componentID2 = componentID2

谁能指出我哪里出错了?

【问题讨论】:

【参考方案1】:

如果您将print(type(onhandqty)) 传递给Part 构造函数,您会看到它是str。如果您希望它成为Part 对象中的int,那么您需要在将其传递给构造函数之前对其进行强制转换。

在类中设置onhandqty = int 不会强制传入的值为int

【讨论】:

以上是关于从具有错误属性类型的 txt 文件创建的对象?的主要内容,如果未能解决你的问题,请参考以下文章

c++,从txt文件中获取电话号码

如何解决这个错误? “具有‘保留(或强)’属性的属性必须是对象类型”

从 2D 向量创建 1D 向量的函数(错误:表达式必须具有指向对象的指针类型)

NonSerialized 属性创建错误

首先是实体框架代码。如何将对象类型文件的列表添加到已具有该类型属性的对象

“计算属性必须具有显式类型”错误:如何在 Swift 2.x 中列出文件? [复制]