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

2024-04-19 11:27:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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\u stock()的方法,它将执行以下操作:

  • u1.预算-s1.价格
  • u1.stocks+=1
  • s1.可用性-=1
  • 将显示用户拥有的股票的价格和名称 所以我会看到一条消息{Karin}已经买了{Netflix} 股票价值200美元。”

Tags: or对象用户nameselfnonedefstock
3条回答
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

当你购买物品时,你必须确保它是可用的,并且你有足够的预算。我从构造器中删除了stock参数,以避免重新格式化,并且逻辑buy_stock只有一个源。最后一点注意:您不需要or键,因为您可以在构造函数中设置默认值。你知道吗

欢迎来到OOP的世界:)

你想做的很简单。因为您试图同时处理两个类,所以这是一个信号,表明应该将其中一个类用作函数中的参数。一、 e

class Stock:
     # .... basic init function

     # we need a function to return the value
     # of this stock, and maybe take an argument
     # for how many shares we want to value
     # so let’s write a function to do that for us

     def get_value(self, number_of_shares=1):
         return (self.value * number_of_shares)

class User:
     #.... basic init function

     def buy_stock(self, stock, amount=1):
          total_value = stock.get_value(amount)
          self.budget = self.budget - total_value
          self.stocks = self.stocks + amount

          #display what happened
          print(“{} bought {} shares of {} for {}”.format(self.name, amount, stock.name, total_value))

那么在实践中你就可以写作了

输入:

# assuming Andrew is a user
# and my_stock is a stock worth $20 a share
Andrew.buy_stock(my_stock, 10)

输出:

Andrew bought 10 shares of my_stock for $200

但基本上,你的问题的答案是通过一个论点,你期待的是你想要的类工作。因此,您可以操作调用该方法的用户对象和传递给该方法的stock对象。你知道吗

我想应该这样做。另外,将股票价格的数据类型从string改为int(或随后进行类型转换)

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, stock):
        self.budget - stock.price
        stock.availability -= 1
        self.stocks += 1
        print("{} has bought {} stock for {} dollars".format(self.name,stock.name,stock.price))

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


s1 = Stock(200, "Netflix")

u1 = User("Karin", stocks=9)

u1.buy_stock(s1)

相关问题 更多 >