Skip to main content
 首页 » 编程设计

Python OOP 在一个方法中操作两个对象

2025年05月04日14qq号

我是 Python 的新手,想了解 OOP。在我的程序中,我希望用户能够买卖股票,但我正在努力实现此功能。很抱歉,如果问题微不足道。

用户类+它的一个对象

class User: 
    def __init__(self, name, budget=None, stocks=None): 
        self.name = name 
        self.budget = budget or 1000  
        self.stocks = stocks or 0 
 
    def sell_stock(self): 
        if self.stocks != 0: 
            self.stocks -= 1 
 
    def buy_stock(self): 
        self.stocks += 1 
 
 
u1 = User("Karin", stocks=9) 

股票类别+它的一个对象

class Stock: 
    def __init__(self, price, name, availability=None): 
        self.price = price 
        self.name = name 
        self.availability = availability or 1 
 
 
s1 = Stock("200", "Netflix") 

我想编写一个名为 buy_stock() 的方法来执行以下操作:

  • u1.budget - s1.price
  • u1.stocks += 1
  • s1.availability -= 1
  • 将显示用户持有的股票的价格和名称 买了,所以我会看到一条消息 f"{Karin} has bought {Netflix} {200} 美元的库存。”

请您参考如下方法:

class Stock: 
    def __init__(self, price, name, availability=1): 
        self.price = price 
        self.name = name 
        self.availability = availability 
 
class User: 
    def __init__(self, name, budget=1000,): 
        self.name = name 
        self.budget = budget  
        self.stocks = [] 
 
    def sell_stock(self, stock): 
        try: 
            self.stocks.remove(stock) 
            stock.availability += 1 
            self.budget += stock.price 
            print('{} has sold {} stock for {} dollars'.format(self.name, stock.name, stock.price)) 
 
        except: 
          pass 
 
    def buy_stock(self, stock): 
        if self.budget - stock.price >= 0 and stock.availability >= 1: 
            self.stocks.append(stock) 
            stock.availability -= 1 
            self.budget -= stock.price 
            print('{} has bought {} stock for {} dollars'.format(self.name, stock.name, stock.price)) 
 
s1 = Stock(200, "Netflix") 
s2 = Stock(300, "SomeStock", availability=2) 
 
u1 = User("Karin", budget=10000) 
u1.buy_stock(s2) 
u1.sell_stock(s2) 
 
u2 = User("Sam") 
u2.buy_stock(s2) 
u2.buy_stock(s1)  

输出:

Karin has bought SomeStock stock for 300 dollars 
Karin has sold SomeStock stock for 300 dollars 
Sam has bought SomeStock stock for 300 dollars 
Sam has bought Netflix stock for 200 dollars 

当您购买商品时,您必须确保它可用并且您有预算。我从构造函数中删除了股票参数以避免重复,并且逻辑 buy_stock 只有一个来源。最后一点:您不需要 或 键,因为您可以在构造函数中设置默认值。