python - 从另一个类的输入变量修改实例的值
问题描述
如果我们有一个具有实例的类,例如self.hawaii = 122
,其中键是比萨饼类型,值是库存,在另一个类的“输入/订单”之后如何减少库存值(减少 22)?
# Dummy example
class Pizza:
def __init__(self):
# key: pizza_type
# value: stock available
self.hawaii = 122
self.funghi = 33
class Order(Pizza):
def order(self):
# For simplicity, I didn't use "input()"
order_type = "hawaii"
order_quantity = 22
for i, j in super().__dict__.items():
if i == order_type:
print(j)
j -= order_quantity
print(j)
for l in super().__dict__.items():
print(l)
if __name__ == '__main__':
b = Order()
b.order()
输出:
122
100
('hawaii', 122) ---> stays the same, I need 100 here
('funghi', 33)
披露:我是 OOP 的新手。
I tried:
- self.get(order_type) --> Error
- self.order_type --> Error
解决方案
当您为 at 分配正确的值j
时j -= order_quantity
。但是j
只是一个副本self.hawaii
所以你没有改变成员值。
无论如何,扫描__dict__
成员仅在非常特定的用例中才有意义。这里更 Pythonic 的方式是:
setattr(self, order_type, getattr(self, order_type) - order_quantity)
推荐阅读
- c - “不可预测”和“垃圾”值之间有区别吗?
- powershell - 如何通过 PowerShell 使用 MailKit 发送电子邮件?
- ios - 添加 module.modulemap 导致依赖循环
- sql - 不是有效月份 - 在 Oracle 中使用日期
- java - 如何在多模块 Maven 项目中使用以前构建的 jar?
- bixby - 如何为新用户提供不同的结果视图
- r - 在 R 中的数据框中创建值的条形图
- html - 当我将图像插入到我的表中时。我的图像超出了列。表格的宽度变得超过部分。我该如何解决这个问题
- android - Android - RecyclerView 项目在方向更改后不可见
- c# - 我可以禁用健康检查 Sqlite healthchecksdb