设为首页收藏本站

Crossin的编程教室

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

【Python 第49课】 面向对象(3)

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

26#
发表于 2017-1-6 20:48:13 |只看该作者
l0ve1o24 发表于 2017-1-6 10:38
老师
speed = 0
car.drive(100.0)

赋值为0是为了确保在使用之前有一个默认值,不然直接调用的话会报错。

类函数的第一个参数 self 是不用你传递的,指向函数的调用对象
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

96

积分

注册会员

Rank: 2

25#
发表于 2017-1-6 10:38:41 |只看该作者
老师
speed = 0
car.drive(100.0)
这两个地方不是很明白,speed后面不是可以随意变动吗?为什么要先给他赋值为0
car.drive 这里不是从类里调用函数吗
def drive(self, distance)这个函数的参数有两个,为什么一定会是distance
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

24#
发表于 2016-7-15 13:17:31 |只看该作者
Joshtu 发表于 2016-7-15 10:11
先生我明白了,加self.speed和不加self的区别了!
如果class里面不加self.speed,直接用speed;每次调用的 ...

应该是你前面设定过一个变量叫speed。不然speed会引起为定义错误
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

40

积分

新手上路

Rank: 1

23#
发表于 2016-7-15 10:11:12 |只看该作者
Joshtu 发表于 2016-7-15 09:51
先生,调用了drive的哦
>>> class Car:
    speed = 0

先生我明白了,加self.speed和不加self的区别了!
如果class里面不加self.speed,直接用speed;每次调用的结果都是一样的:
上梨子:
>>> car1 = Car()
>>> car1.speed = 60.0
>>> car1.drive(100.0)
1.66666666667
c
>>> car1.drive(200.0)
3.33333333333
>>> car2 = Car()
>>> car2.speed = 150.0
>>> car2.drive(100.0)
1.66666666667
>>> car2.drive(200.0)
3.33333333333
回复

使用道具 举报

0

主题

0

好友

40

积分

新手上路

Rank: 1

22#
发表于 2016-7-15 09:51:02 |只看该作者
crossin先生 发表于 2016-7-15 00:11
不一样。没报错是因为你没有调用 drive 方法吧

先生,调用了drive的哦
>>> class Car:
    speed = 0
    def drive(self, distance):
        time = distance / speed
        print time

        
>>> car = Car()
>>> car.speed = 60.0
>>> car.drive(100.0)
1.66666666667
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

21#
发表于 2016-7-15 00:11:32 |只看该作者
Joshtu 发表于 2016-7-14 17:02
先生:
这个Class Car里面:time = distance / speed也不会报错。
class Car:

不一样。没报错是因为你没有调用 drive 方法吧
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

40

积分

新手上路

Rank: 1

20#
发表于 2016-7-14 17:02:15 |只看该作者
crossin先生 发表于 2013-12-2 19:06
speed是成员变量,这个类的每个实例都会有一个属于自己的speed
drive是成员函数,它要被这个类的实例所调 ...

先生:
这个Class Car里面:time = distance / speed也不会报错。
class Car:
        speed = 0
        def drive(self, distance):
                time = distance / speed
                print time
和你写的 time = distance / self.speed
效果一样吗?
回复

使用道具 举报

0

主题

0

好友

18

积分

新手上路

Rank: 1

19#
发表于 2016-6-1 16:02:28 |只看该作者
这个不仔细看还真不容易发现,thx!
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

18#
发表于 2016-6-1 11:59:02 |只看该作者
大肚皮的python 发表于 2016-5-31 20:37
上述代码有什么问题呢?总是显示Bike类不需要参数。。。

__init__ 是两个下划线,系统内置方法和属性都是两个下划线
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

18

积分

新手上路

Rank: 1

17#
发表于 2016-5-31 20:37:19 |只看该作者
  1. class vehicle:
  2.     def _init_(self,speed):
  3.         self.speed = speed
  4.     def drive(self,distance):
  5.         print 'need %.2f time'%float(distance)/self.speed
  6.         
  7. class Bike(vehicle):
  8.     pass
  9. class Car(vehicle):
  10.     def _init_(self,speed,fuel):
  11.         vehicle._init_(self,speed)
  12.         self.fuel = fuel
  13.     def drive(self,distace):
  14.         vehicle.drive(self,distace)
  15.         print 'need %f fuel'%(distace*self.fuel)

  16. a = Bike(15.0)
  17. b = Car(80.0,0.0025)
  18. a.drive(50)
  19. b.drive(50)
复制代码
上述代码有什么问题呢?总是显示Bike类不需要参数。。。
回复

使用道具 举报

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

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

GMT+8, 2024-5-18 17:19 , Processed in 0.020039 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部