设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第50课】 面向对象(4)

[复制链接]

0

主题

0

好友

14

积分

新手上路

Rank: 1

41#
发表于 2016-6-3 13:19:17 |只看该作者
老师,有两个问题:
1.
b = Bike(15.0)
c = Car(80.0, 0.012)
这里两行代码是不是是由:
b=Bike()
b.Bike=15.0
这样类似的缩写而来的?
2.
我看到之前的课没有初始化函数,在相应的地方您用的:
class Car:
    speed = 0
这样的效果是一样的吗,还是说之后复杂的程序会还是用__init__函数好些

谢谢老师
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

42#
发表于 2016-6-3 13:45:00 |只看该作者
kuaikemai 发表于 2016-6-3 13:19
老师,有两个问题:
1.
b = Bike(15.0)

效果类似,但不是缩写。如你所说,__init__这么定义了,所以必须在初始化的时候给。从规范上来说,一个东西如果有一个必须得在一开始就设定的属性,那应该初始化就给。不然别人用你的类的时候,可能并不知道还必须要给这个值
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

96

积分

注册会员

Rank: 2

43#
发表于 2017-1-12 16:14:14 |只看该作者
class Car(Vehicle):
    def __init__(self, speed, fuel):
        Vehicle.__init__(self, speed)
        self.fuel = fuel
老师,这段里Vehicle.__init__(self, speed) 改成self.speed = speed
好像更好理解
  1. class Vehicle:
  2.     def __init__(self, speed):
  3.         self.speed = speed

  4.     def drive(self, distance):
  5.         print 'need %f hour(s)' % (distance / self.speed)

  6. class Bike(Vehicle):
  7.     pass

  8. class Car(Vehicle):
  9.     def __init__(self, speed, fuel):
  10.         self.speed = speed
  11.         self.fuel = fuel

  12.     def drive(self, distance):
  13.         Vehicle.drive(self, distance)
  14.         print 'need %f fuels' % (distance * self.fuel)

  15. b = Bike(15.0)
  16. c = Car(80.0, 0.012)
  17. b.drive(100.0)
  18. c.drive(100.0)
复制代码
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

44#
发表于 2017-1-12 17:45:14 |只看该作者
l0ve1o24 发表于 2017-1-12 16:14
class Car(Vehicle):
    def __init__(self, speed, fuel):
        Vehicle.__init__(self, speed)

效果一样,但你这个就没有调用父类方法了。等于完全抛弃了原有的代码
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

96

积分

注册会员

Rank: 2

45#
发表于 2017-1-13 12:36:47 |只看该作者
crossin先生 发表于 2017-1-12 17:45
效果一样,但你这个就没有调用父类方法了。等于完全抛弃了原有的代码

恩,谢谢老师
回复

使用道具 举报

0

主题

0

好友

34

积分

新手上路

Rank: 1

46#
发表于 2017-7-11 16:59:43 来自手机 |只看该作者
请问 Bike类中的pass是一个关键字吗?可以不写这个pass吗?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

47#
发表于 2017-7-11 22:57:48 |只看该作者
nic8523 发表于 2017-7-11 16:59
请问 Bike类中的pass是一个关键字吗?可以不写这个pass吗?

是个关键字,不写的话这里就空了,那会报错。pass就是什么也不做,但保证程序的结构完整
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

24

积分

新手上路

Rank: 1

48#
发表于 2017-11-4 14:55:52 |只看该作者
class Car(Vehicle):
    def __init__(self, speed, fuel):
        Vehicle.__init__(self, speed)
        self.fuel = fuel

    def dirve(self, distance):
        Vehicle.driver(self, distance)
        print('need %f fuels' % (distance * self.fuel))

b = Bike(15.0)
c = Car(80.0,0.012)
b.drive(100.0)
c.drive(100.0)

先生 我Car类里面的drive写成了 dirve 然后在下面的c.drive(100.0)还是成功的输出了
need 6.666667 hour(s)
need 1.250000 hour(s)
刚开始我想了半天
怎么下行print没输出来。。   然后又重新写了下代码才发现
现在又想想为什么代码没报错呢   我的Car里没drive方法啊
回复

使用道具 举报

0

主题

0

好友

24

积分

新手上路

Rank: 1

49#
发表于 2017-11-4 15:00:39 |只看该作者
z850672062 发表于 2017-11-4 14:55
class Car(Vehicle):
    def __init__(self, speed, fuel):
        Vehicle.__init__(self, speed)

是不是因为继承了父类

所以c.drive(100.0) 调用的是父类(超类)的 drive方法
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

50#
发表于 2017-11-4 15:27:31 |只看该作者
z850672062 发表于 2017-11-4 15:00
是不是因为继承了父类

所以c.drive(100.0) 调用的是父类(超类)的 drive方法

是呀
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

GMT+8, 2024-11-22 07:58 , Processed in 0.020383 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部