请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 2550|回复: 1

面向对象的问题

[复制链接]

2

主题

0

好友

28

积分

新手上路

Rank: 1

发表于 2022-9-27 03:17:14 |显示全部楼层
第48课

问题是:
两辆车,速度分别是60和100,要求分别计算从A到B的时间和B到C的时间

标准答案:
class Car:
    speed = 0
    def drive(self, distance):
        time = distance / self.speed
        print (time)

car1 = Car()
car1.speed = 60.0
car1.drive(100.0)
car1.drive(200.0)

car2 = Car()
car2.speed = 150.0
car2.drive(100.0)
car2.drive(200.0)


我的答案是:
class vehicle:
    dis_A_B = 100
    dis_B_C = 200
    def time(self, speed):
        time_A_B = self.dis_A_B / speed
        time_B_C = self.dis_B_C / speed
        print('time from A to B is %.2f hrs' % time_A_B)
        print('time from B to C is %.2f hrs' % time_B_C)
car = vehicle()
car.time(60)

print('------------')

car_pro = vehicle()
car_pro.time(150)


我的问题是:
我写的这个算不算面向对象?
相比之下哪种更简洁?

回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2022-9-27 11:49:27 |显示全部楼层
用了面向对象的形式(class)
但是没有用面向对象的思想
对象(object)最直观的理解就是现实世界中的一个物品,而“类”是一种概念。比如汽车是一种概念(class),具体的一辆车就是一个实际的物品(object)

你这里很明确了“两辆车”,更合理的写法就是 车是一种抽象概念(class),然后创建两个实例(object,也可以叫 instance),这两个实例结构是一样的,就是数值不同,一个60,一个100。这个是面向对象的思想

对于一个简单的例子,谈是否简洁没意义,因为你这个例子不用面向对象也就是两句代码的事,当然不必硬用对象。但你如果写个游戏,里面一堆不同车辆不同属性,你再试试用你的这种写法看
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-18 20:43 , Processed in 0.021118 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部