首页 > 解决方案 > 从另一个类的输入变量修改实例的值

问题描述

如果我们有一个具有实例的类,例如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

标签: python

解决方案


当您为 at 分配正确的值jj -= order_quantity。但是j只是一个副本self.hawaii所以你没有改变成员值。

无论如何,扫描__dict__成员仅在非常特定的用例中才有意义。这里更 Pythonic 的方式是:

setattr(self, order_type, getattr(self, order_type) - order_quantity)

推荐阅读