错误提示:
AttributeError: 'list' object has no attribute 'cost'
我正在尝试使用以下类来处理自行车字典来进行简单的利润计算:
class Bike(object):
def __init__(self, name, weight, cost):
self.name = name
self.weight = weight
self.cost = cost
bikes = {
# Bike designed for children"
"Trike": ["Trike", 20, 100],
# Bike designed for everyone"
"Kruzer": ["Kruzer", 50, 165]
}
当我尝试使用 for 语句计算利润时,出现属性错误。
# Markup of 20% on all sales
margin = .2
# Revenue minus cost after sale
for bike in bikes.values():
profit = bike.cost * margin
首先,我不知道为什么它指的是一个列表,一切似乎都被定义了,不是吗?
考虑:
class Bike(object):
def __init__(self, name, weight, cost):
self.name = name
self.weight = weight
self.cost = cost
bikes = {
# Bike designed for children"
"Trike": Bike("Trike", 20, 100), # <--
# Bike designed for everyone"
"Kruzer": Bike("Kruzer", 50, 165), # <--
}
# Markup of 20% on all sales
margin = .2
# Revenue minus cost after sale
for bike in bikes.values():
profit = bike.cost * margin
print(profit)
输出:
33.0 20.0
不同之处在于,在您的
bikes
字典中,您将值初始化为列表 [...]
。相反,您的代码的其余部分似乎需要 Bike
实例。因此,创建 Bike
实例:Bike(...)
。
至于你的错误
AttributeError: 'list' object has no attribute 'cost'
当您尝试在
.cost
对象上调用 list
时,就会发生这种情况。非常简单,但我们可以通过查看您调用 .cost
的位置来弄清楚发生了什么——在这一行中:
profit = bike.cost * margin
这表明至少有一个
bike
(即bikes.values()
的成员是一个列表)。如果您查看定义 bikes
的位置,您会发现这些值实际上是列表。所以这个错误是有道理的。
但是由于 your class 有一个成本属性,看起来你正在尝试使用
Bike
实例作为值,所以我做了一点改变:
[...] -> Bike(...)
一切准备就绪。
它们是列表,因为您在字典中将它们键入为列表:
bikes = {
# Bike designed for children"
"Trike": ["Trike", 20, 100],
# Bike designed for everyone"
"Kruzer": ["Kruzer", 50, 165]
}
你应该使用自行车类:
bikes = {
# Bike designed for children"
"Trike": Bike("Trike", 20, 100),
# Bike designed for everyone"
"Kruzer": Bike("Kruzer", 50, 165)
}
这将允许您通过 bike.cost 获得自行车的成本,正如您所尝试的那样。
for bike in bikes.values():
profit = bike.cost * margin
print(bike.name + " : " + str(profit))
现在将打印:
Kruzer : 33.0
Trike : 20.0
在使用之前,您需要将字典的值传递到
Bike
构造函数中。或者,请参阅 namedtuple
- 似乎更符合您想要做的事情。
从 gettext 导入安装 从系统导入argv 导入nmap
扫描仪 = nmap.PortScanner()
主机 = argv.主机
如果不是主持人: print("输入主机。") 尝试: # 允许在港口范围内使用 begin = int(input("波多黎各首字母:")) - 1 结束=1023
mensaje = f"Escaneando {host} puerto {begin} al {end}...\n"
print(mensaje)
# Almacenar los resultados en el archivo
with open ("nombre_archivo", 'w') as archivo:
archivo.write("\n" + "*" * 50 + "\n")
archivo.write(mensaje)
for i in range (begin, end + 1):
res = scanner.scan (host, str(i))
estado_puerto = res['scan'][host]['tcp'][i]['state']
# Si el puerto está abierto, obtener datos
servicio = res['scan'][host]['tcp'][i].get('nombre', 'desconocido')
resultado = f'Puerto ({i+1}) está {estado_puerto}. Servicio: {servicio}\n'
print(resultado)
archivo.write(resultado)
except KeyboardInterrupt:
print("\nEscaneo cancelado por el usuario.")
exit()