我正在嘗試創建一個酒吧程式,它基于用戶輸入、類和繼承。這是我當前與用戶輸入無關的部分代碼。
class Bar:
def __init__(self, name, stock = []) -> None:
self.name = name
self.stock = stock
def fill_stock(self):
pass
def reduce_stock(self, name):
if name == 'Whiskey Sour':
whiskey.stock -= 5
citrus_juice.stock -= 3
sugar_syrup.stock = 2
elif name == 'Negroni':
campari.stock -= 2
gin.stock -= 2
sweet_Vermouth.stock -= 2
elif name == 'Dry Martini':
gin.stock -= 5
dry_vermouth.stock -= 1
def randomize_stock(self):
pass
#Mainclass Item
class Item:
#All items have a name, and an amount in stock
def __init__(self, name, stock) -> None:
self.stock = stock
self.name = name
def __str__(self) -> str:
return f''
#Subclass Liquor (For all alcoholic liquids)
class Liquor(Item):
#List of the objects name found in the class
instances = []
#Every liquor has a name, how much stock is left, brand, cl_price, percentage of alcohol
def __init__(self, name, stock, brand, cl_price, percentage) -> None:
super().__init__(name, stock)
self.cl_price = cl_price
self.percentage = percentage
self.brand = brand
#Adds all instances of the class to a list
self.__class__.instances.append(name)
#Returns the names of the instances found in the class
def liquor_list():
return '\n'.join(Liquor.instances)
#Subclass Mixer (for all non-alcoholic liquids)
class Mixer(Item):
#Every mixer has a name, how much stock is left, cl_price
def __init__(self, name, stock, brand, cl_price) -> None:
super().__init__(name, stock)
self.brand = brand
self.cl_price = cl_price
#Subclass Garnish (for all garnishes)
class Garnish(Item):
#Every garnish has a name, and how much stock left
def __init__(self, name, stock) -> None:
super().__init__(name, stock)
#Liquor Creation
vodka = Liquor('Vodka', 79, 'Absolut', '35 kr', '37.5%')
mezcal = Liquor('Mezcal', 56, 'Corte Vetusto', '55 kr', '45%')
whiskey = Liquor('Ardbeg', 94, 'Ardbeg', '50 kr', '46%',)
rum = Liquor('Rum', 109, 'Havana Club', '25 kr', '37.5%')
baileys = Liquor('Baileys', 43, 'Baileys', '20 kr', '17%')
gin = Liquor('Gin', 89, 'Beefeater', '40 kr', '40%')
campari = Liquor('Campari', 97, 'Campari', '20 kr', '20%')
sweet_vermouth = Liquor('Sweet Vermouth', 146, 'Martini Rosso', '20kr', '15%')
dry_vermouth = Liquor('Dry Vermouth', 43, 'Noileprat', '45kr', '17%')
#Mixer Creation
tonic = Mixer('Tonic', 1889, 'SweTnc', '5 kr')
sugar_syrup = Mixer('Sugar Syrup', 2000, 'Simple', None)
citrus_juice = Mixer('Citrus_Juice', 3000, 'ICA', None)
但是,現在當我運行 ie 時reduce_stock,它??會更改值,但隨后將其丟棄。就像沒有永久更改一樣,每當您再次運行程式時,它都會恢復到以前的狀態。
class Bar:
def __init__(self, name) -> None:
self.name = name
def fill_stock(self, name):
pass
def reduce_stock(self):
pass
def randomize_stock(self):
pass
def create_stock(self, name, stock, brand, cl_price, percentage):
name = Inventory(name, stock, brand, cl_price, percentage)
def remove_stock(self):
pass
class Inventory:
def __init__(self, name, stock, brand, cl_price, percentage) -> None:
self.stock = stock
self.name = name
self.brand = brand
self.cl_price = cl_price
self.percentage = percentage
我也在嘗試重構代碼以使其更具可讀性,但是create_stock由于它似乎想要一個自我的值意味著你必須輸入 6 個值而不是想要的 5 個。
uj5u.com熱心網友回復:
我有一些重新設計給你。我喜歡您嘗試Liquor將所有實體添加到類串列中的類。但是有一個字典,其中鍵是酒的名稱,而實際實體的值將允許您按名稱查找酒。
但為什么只喝酒就停在那里。擁有所有物品的字典,無論是酒、攪拌機、裝飾物還是其他物品。
此外,該方法Bar.reduce_stock具有復雜的if else測驗正在制作的飲料。因此,這門課需要了解所有可能的飲料以及如何制作。這不是好的面向物件設計。需要的是定義該方法Drink的每種可能飲料的類和子類。reduce_stock該類Drink本身提供了按名稱查找飲料。因此,該Bar.reduce_stock方法變成了一個簡單的查找呼叫,以獲取正確的飲料,然后委托給該實體。在定義其他方法之前Bar,它確實沒有提供非常有用的功能;可以簡單地按名稱查找飲料并直接呼叫其reduce_stock方法,而無需使用Bar類。
我也不知道Inventory該類的用途是什么,因為每個專案都將這些值作為屬性進行維護。目前我已經放棄了這門課,只想展示“庫存”是如何更新的。
#Mainclass Item
class Item:
items = {}
#All items have a name, and an amount in stock
def __init__(self, name, stock) -> None:
self.stock = stock
self.name = name
# Add item to class dictionary:
self.items[name] = self
def __str__(self) -> str:
return f'Name: {self.name}, Stock: {self.stock}'
@classmethod
def get(cls, name):
return cls.items[name]
@classmethod
def all_items(cls):
return '\n'.join(str(v) for v in cls.items.values())
#Subclass Liquor (For all alcoholic liquids)
class Liquor(Item):
#Every liquor has a name, how much stock is left, brand, cl_price, percentage of alcohol
def __init__(self, name, stock, brand, cl_price, percentage) -> None:
super().__init__(name, stock)
self.cl_price = cl_price
self.percentage = percentage
self.brand = brand
def __str__(self):
s = super().__str__()
return s f', Brand: {self.brand}, Price: {self.cl_price}, Percentage: {self.percentage}'
#Subclass Mixer (for all non-alcoholic liquids)
class Mixer(Item):
#Every mixer has a name, how much stock is left, cl_price
def __init__(self, name, stock, brand, cl_price) -> None:
super().__init__(name, stock)
self.brand = brand
self.cl_price = cl_price
def __str__(self):
s = super().__str__()
return s f', Brand: {self.brand}, Price: {self.cl_price}'
#Subclass Garnish (for all garnishes)
class Garnish(Item):
#Every garnish has a name, and how much stock left
def __init__(self, name, stock) -> None:
super().__init__(name, stock)
class Drink:
drinks = {}
def __init__(self, name):
self.name = name
self.drinks[name] = self
def reduce_stock(self):
raise Exception('This method must be overriden.')
@classmethod
def get(cls, name):
return cls.drinks[name]
class WhiskeySour(Drink):
def __init__(self):
super().__init__('Whiskey Sour')
def reduce_stock(self):
whiskey = Item.get('Scotch') # Bourbon or Rye, please!
whiskey.stock -= 5
citrus_juice = Item.get('Citrus_Juice')
citrus_juice.stock -= 3
sugar_syrup = Item.get('Sugar Syrup')
sugar_syrup.stock -= 2 # Should be -=
WhiskeySour()
class Negroni(Drink):
def __init__(self):
super().__init__('Negroni')
def reduce_stock(self):
campari = Item.get('Campari')
campari.stock -= 2
gin = Item.get('Gin')
gin.stock -= 2
sweet_vermouth = Item.get('Sweet Vermouth')
sweet_vermouth.stock -= 2
Negroni()
class DryMartini(Drink):
def __init__(self):
super().__init__('Martini')
def reduce_stock(self):
gin = Item.get('Gin')
gin.stock -= 5
dry_vermouth = Item.get('Dry Vermouth')
dry_vermouth.stock -= 1
DryMartini()
class Bar:
def fill_stock(self):
pass
# This could be a static or class method:
def reduce_stock(self, name):
drink = Drink.get(name)
drink.reduce_stock()
def randomize_stock(self):
pass
def create_stock(self, name, stock, brand, cl_price, percentage):
pass
def remove_stock(self):
pass
#Liquor Creation
Liquor('Vodka', 79, 'Absolut', '35 kr', '37.5%')
Liquor('Mezcal', 56, 'Corte Vetusto', '55 kr', '45%')
Liquor('Scotch', 94, 'Ardbeg', '50 kr', '46%',)
Liquor('Rum', 109, 'Havana Club', '25 kr', '37.5%')
Liquor('Baileys', 43, 'Baileys', '20 kr', '17%')
Liquor('Gin', 89, 'Beefeater', '40 kr', '40%')
Liquor('Campari', 97, 'Campari', '20 kr', '20%')
Liquor('Sweet Vermouth', 146, 'Martini Rosso', '20kr', '15%')
Liquor('Dry Vermouth', 43, 'Noileprat', '45kr', '17%')
#Mixer Creation
Mixer('Tonic', 1889, 'SweTnc', '5 kr')
Mixer('Sugar Syrup', 2000, 'Simple', None)
Mixer('Citrus_Juice', 3000, 'ICA', None)
bar = Bar()
bar.reduce_stock('Whiskey Sour')
print(Item.all_items())
印刷:
Name: Vodka, Stock: 79, Brand: Absolut, Price: 35 kr, Percentage: 37.5%
Name: Mezcal, Stock: 56, Brand: Corte Vetusto, Price: 55 kr, Percentage: 45%
Name: Scotch, Stock: 89, Brand: Ardbeg, Price: 50 kr, Percentage: 46%
Name: Rum, Stock: 109, Brand: Havana Club, Price: 25 kr, Percentage: 37.5%
Name: Baileys, Stock: 43, Brand: Baileys, Price: 20 kr, Percentage: 17%
Name: Gin, Stock: 89, Brand: Beefeater, Price: 40 kr, Percentage: 40%
Name: Campari, Stock: 97, Brand: Campari, Price: 20 kr, Percentage: 20%
Name: Sweet Vermouth, Stock: 146, Brand: Martini Rosso, Price: 20kr, Percentage: 15%
Name: Dry Vermouth, Stock: 43, Brand: Noileprat, Price: 45kr, Percentage: 17%
Name: Tonic, Stock: 1889, Brand: SweTnc, Price: 5 kr
Name: Sugar Syrup, Stock: 1998, Brand: Simple, Price: None
Name: Citrus_Juice, Stock: 2997, Brand: ICA, Price: None
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520852.html
