首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面向过程脚本到面向对象脚本转换中的问题

面向过程脚本到面向对象脚本转换中的问题
EN

Stack Overflow用户
提问于 2022-05-09 01:04:01
回答 2查看 56关注 0票数 1

我想把(原来的脚本)面向过程的脚本转换成面向对象的脚本,但是我尝试了很多次,每次都失败了--我要写原稿--然后我会写我的尝试。

要求

  1. 自行车属性(描述、自行车成本、销售价格和自行车状况)。
  2. 将自行车成本从500更新到350。

以程序为导向:

代码语言:javascript
复制
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)

面向对象(我的尝试):

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-09 01:09:58

代码中的概念性“对象”是自行车块--您应该做的是创建一个包含来自自行车块的数据的类,并创建该类的函数方法。

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2022-05-09 01:44:56

根据维基百科关于面向对象程序设计的文章,“这是一个基于”对象“概念的编程范例,它可以包含数据和代码:字段形式的数据(通常称为属性或属性)和代码,以过程的形式(通常称为方法)。”

从字面上看,这意味着您应该将影响自行车字典中任何值的任何函数转换为Bike类的方法。在Python中,这不是严格意义上正确的,但理解为什么是一个比较高级的主题,而不是与您所问的核心问题非常密切的原因。

下面是如何将所述的原则应用于您的过程编程,并使其面向对象。请注意,我添加了一个特殊的__repr__()方法,它将控制类实例如何“正式”地将自己表示为字符串。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72166080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档