将面向过程的脚本转换为面向对象的编程脚本的问题
Problem in converting procedure oriented script to object oriented programing script
我想将(原始脚本)面向过程的脚本转换为面向对象的脚本,但是我在很多方面尝试了很多次,但每次都失败了我会写原始脚本然后我会写我的尝试
要求
自行车属性(描述和自行车成本和销售价格以及自行车状况)。
将自行车成本从 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)
代码中的概念“对象”是自行车字典——您应该做的是创建一个包含来自自行车字典的数据的单个 class,并创建该 class.
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)
根据Object Oriented Programming上的维基百科文章,[它]是一种基于“对象”概念的编程范式,它可以包含数据和代码:数据形式字段(通常称为属性或属性)和代码,以过程的形式(通常称为方法)。
从字面上看,这意味着您应该将影响自行车字典中任何值的任何函数转换为 Bike
class 的方法。在 Python 中,这并不完全正确,但理解为什么是一个有点高级的主题,与您要问的核心问题并不是非常相关。
以下是如何将规定的原则应用到您的程序编程中并使其成为 object-oriented。请注意,我添加了一个特殊的 __repr__()
方法来控制 class 个实例如何“正式”将它们自己表示为字符串。
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)
我想将(原始脚本)面向过程的脚本转换为面向对象的脚本,但是我在很多方面尝试了很多次,但每次都失败了我会写原始脚本然后我会写我的尝试
要求
自行车属性(描述和自行车成本和销售价格以及自行车状况)。
将自行车成本从 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)
代码中的概念“对象”是自行车字典——您应该做的是创建一个包含来自自行车字典的数据的单个 class,并创建该 class.
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)
根据Object Oriented Programming上的维基百科文章,[它]是一种基于“对象”概念的编程范式,它可以包含数据和代码:数据形式字段(通常称为属性或属性)和代码,以过程的形式(通常称为方法)。
从字面上看,这意味着您应该将影响自行车字典中任何值的任何函数转换为 Bike
class 的方法。在 Python 中,这并不完全正确,但理解为什么是一个有点高级的主题,与您要问的核心问题并不是非常相关。
以下是如何将规定的原则应用到您的程序编程中并使其成为 object-oriented。请注意,我添加了一个特殊的 __repr__()
方法来控制 class 个实例如何“正式”将它们自己表示为字符串。
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)