我想將(原始腳本)面向程序的腳本轉換為面向物件的腳本,但是我以多種方式嘗試了很多次,每次都失敗了,我將撰寫原始腳本,然后我將撰寫我的嘗試
要求
自行車屬性(描述和自行車成本和銷售價格以及自行車狀況)。
將自行車成本從 500 更新為 350。
面向程序:
def update_sale_price(bike, sale_price):
if bike['sold'] == True:
print('Action not allowed, Bike has already been sold')
else:
bike['sale_price'] = sale_price
def sell(bike):
bike['sold'] = True
def create_bike(description, cost, sale_price, condition):
return {
'description': description,
'cost': cost,
'sale_price': sale_price,
'condition': condition,
'sold': False
}
bike1 = create_bike('Univega Alpina, orange', cost=100, sale_price=500, condition=0.5)
update_sale_price(bike1, 350)
sell(bike1)
print(bike1)
面向物件(我的嘗試):
class create_bike:
def __init__(self, sale_price, description, cost, condition):
self.sale_price = sale_price
self.description = description
self.cost = cost
self.condition = condition
class update_sell_price:
def __init__ (self, bike, sale_price):
self.bike = bike
self.sale_price = sale_price
bike1 = create_bike(description='Univega Alpina, orange', cost=100, sale_price=500, condition=0.5)
up = update_sell_price(bike=bike1, sale_price=350)
print(up)
uj5u.com熱心網友回復:
您的代碼中的概念“物件”是bike dict——您應該做的是創建一個包含bike dict 資料的單個類,并創建該類的函式方法。
from dataclasses import dataclass
@dataclass
class Bike:
description: str
cost: int
sale_price: int
condition: float
sold = False
def update_sale_price(self, sale_price):
if self.sold:
print('Action not allowed, Bike has already been sold')
else:
self.sale_price = sale_price
def sell(self):
self.sold = True
def __str__(self):
return str(self.__dict__)
bike1 = Bike('Univega Alpina, orange', cost=100, sale_price=500, condition=0.5)
bike1.update_sale_price(350)
bike1.sell()
print(bike1)
uj5u.com熱心網友回復:
根據 Wikipedia 關于Object Oriented Programming的文章,“[It] 是一種基于“物件”概念的編程范式,它可以包含資料和代碼:欄位形式的資料(通常稱為屬性或屬性),以及代碼,以程序(通常稱為方法)的形式。”
從字面上看,這意味著您應該將任何影響自行車字典中任何值的函式放入Bike類的方法中。在 Python 中,這并不完全正確,但理解為什么是一個有點高級的主題,并且與您所問的核心問題并不密切相關。
以下是如何將所述原則應用于您的程式編程并使其面向物件。請注意,我添加了一個特殊__repr__()方法,該方法將控制類實體如何“正式”將自己表示為字串。
class Bike:
def __init__(self, sale_price, description, cost, condition, sold=False):
self.sale_price = sale_price
self.description = description
self.cost = cost
self.condition = condition
self.sold = sold
def __repr__(self):
classname = type(self).__name__
attributes = ', '.join(f'{name}={value!r}' for name, value in vars(self).items())
return f'{classname}({attributes})'
def sell(self):
self.sold = True
def update_sell_price(self, sale_price):
self.sale_price = sale_price
bike1 = Bike(description='Univega Alpina, orange', cost=100, sale_price=500, condition=0.5)
bike1.update_sell_price(sale_price=350)
bike1.sell()
print(bike1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/471684.html
上一篇:方法在它所在的類之外不起作用
