gpt4 book ai didi

python - 如何 split() 字符串并将其传递给对象的 __init__() 方法?

转载 作者:行者123 更新时间:2023-11-30 22:15:21 27 4
gpt4 key购买 nike

我正在尝试使用文件中的信息创建 Soda 对象的多个实例。该文件的格式如下:名称、价格、编号

Mtn. Dew,1.00,10

Coke,1.50,8

Sprite,2.00,3

我的代码是这样的(这是 main() 中的一个函数):

from Sodas import Soda

def fillMachine(filename) :

# Create an empty list that will store pop machine data
popMachine = []

# Open the file specified by filename for reading
infile = open(filename, "r")

# Loop to read each line from the file and append a new Soda object
# based upon information from the line into the pop machine list.
for line in infile :
popMachine.append(Soda(str(line.strip())))

# Close the file
infile.close()

# Return the pop machine list
return popMachine

如果我没猜错,popMachine 应该是 3 个不同 Soda 对象的列表,每个对象都有一行输入文件。

在我的类(class)中,我需要能够仅获取名称、价格或数量,以便稍后在计算中使用。我的苏打水类代码如下所示:

#Constructor
def __init__(self, _name = "", _price = 0.0, _quantity = 0) :
self._name = self.getName()
self._price = _price
self._quantity = _quantity

def getName(self) :
tempList = self.split(",")
self._name = tempList[0]
return self._name

这就是我遇到问题的地方。 IIRC self 代替主代码中的 line ,因此 self 应该是一个字符串,例如“Mtn.Dew,1.00,10”,并且 split(",") 方法的预期结果应该形成一个类似 ["Mtn .Dew", "1.00", "10"] 然后我可以使用该列表的索引仅返回名称。

但是,我收到此错误“AttributeError:Soda 实例没有属性‘split’”,我不知道为什么。另外,这段代码中的所有评论都来 self 的导师,作为作业的一部分,所以即使有更快/更好的方法来完成这整个事情,这就是我必须这样做的方式:/

最佳答案

当你使用self时,你引用的是Soda的实例,并且由于你没有定义split方法,所以它不会有一个。

您可以简单地使用解包将 split 的结果传递给类。

您可能需要添加一些检查以确保解包返回三个值,但由于您使用默认参数,因此只有在您提供多于三个值时才会出错。

class Soda:
def __init__(self, name = "", price = 0.0, quantity = 0) :
self.name = name
self.price = price
self.quantity = quantity


sodas = []
with open('test.txt') as f:
for line in f:
sodas.append(Soda(*line.split(',')))

for soda in sodas:
print(soda.name)

输出:

Mtn. Dew
Coke
Sprite

您甚至可以定义一个辅助方法,从文件中的一行返回 Soda 实例:

@staticmethod
def make_soda(line):
try:
name, price, quantity = line.split(',')
return Soda(name, price, quantity)
except:
raise ValueError('Bad Soda')

您可以使用以下方式调用:

Soda.make_soda(line)

关于python - 如何 split() 字符串并将其传递给对象的 __init__() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50322454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com