我想把(原来的脚本)面向过程的脚本转换成面向对象的脚本,但是我尝试了很多次,每次都失败了--我要写原稿--然后我会写我的尝试。
要求
以程序为导向:
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)发布于 2022-05-09 01:09:58
代码中的概念性“对象”是自行车块--您应该做的是创建一个包含来自自行车块的数据的类,并创建该类的函数方法。
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)发布于 2022-05-09 01:44:56
根据维基百科关于面向对象程序设计的文章,“这是一个基于”对象“概念的编程范例,它可以包含数据和代码:字段形式的数据(通常称为属性或属性)和代码,以过程的形式(通常称为方法)。”
从字面上看,这意味着您应该将影响自行车字典中任何值的任何函数转换为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://stackoverflow.com/questions/72166080
复制相似问题