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

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生

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

[复制链接]

1

主题

0

好友

49

积分

新手上路

Rank: 1

发表于 2014-7-3 09:45:33 |显示全部楼层
crossin先生 发表于 2013-9-1 00:33
如果不加self,那speed就只是drive函数中的一个局部变量

这个有什么影响?
回复

使用道具 举报

1

主题

0

好友

49

积分

新手上路

Rank: 1

发表于 2014-7-3 09:45:56 |显示全部楼层
crossin先生 发表于 2013-9-1 00:34
distance只是个变量,不是类。

没懂
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2014-7-3 15:01:59 |显示全部楼层
萧风 发表于 2014-7-3 09:45
没懂

这个我无法一两句给你简单形象的解释了。
建议你去找本系统的编程书籍看一看面向对象的介绍。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

匿名  发表于 2014-7-29 22:58:43
class Vehicle:
    def __init__(self, speed):
        self.speed = speed
     #赋值函数,将成员变量值speed(抽象的、任何机器的speed)赋给函数内实际调用值self.speed(函数内真正用到的某个机器的speed),以便下面的函数调用(成员函数里的变量都是特指的某个具体的变量,用self.开头)
    def drive(self, distance):
        print 'need %f hour(s)' % (distance / self.speed)
  #这个是个类里面的成员函数,计算功能
class Bike(Vehicle):
    pass
#完全继承,不用改动

class Car(Vehicle):
    def __init__(self, speed, fuel):
        Vehicle.__init__(self, speed)
        self.fuel = fuel
   赋值函数,在继承vehicle的基础上,Vehicle.__init__(self, speed)是继承过来的,多加了个fuel,同样把fuel值赋给self。fuel以备调用
    def drive(self, distance):
        Vehicle.drive(self, distance)
        print 'need %f fuels' % (distance * self.fuel)
#成员函数,按规则计算功能,除了按vehicle的规则计算用时外,加入了新规则计算油耗(这里用到了self.fuel值)。
b = Bike(15.0)
c = Car(80.0, 0.012)
b.drive(100.0)
c.drive(100.0)
计算结果是三个。
这个面向对象的程序,简单来讲就是指定一个公用的类,设定变量(包括类成员变量,实际计算调用具体变量),制定规则(应用成员函数)
   这是我个人的理解。
                   -------------------------------------------------鹰隼
回复

使用道具

0

主题

0

好友

558

积分

高级会员

Rank: 4

发表于 2014-9-26 00:39:43 |显示全部楼层
是不是每次生成对象的时候,b = Bike(15.0),会首先自动调用,def __init__(self, speed):
        self.speed = speed,这个方法,把15.0自动赋值给了speed,这个对象就有了speed的值。
学习,纯粹。
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2014-9-26 10:41:30 |显示全部楼层
liu-pengfei 发表于 2014-9-26 00:39
是不是每次生成对象的时候,b = Bike(15.0),会首先自动调用,def __init__(self, speed):
        self.sp ...

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

使用道具 举报

0

主题

0

好友

36

积分

新手上路

Rank: 1

发表于 2015-3-20 17:09:16 |显示全部楼层
  1. #coding:gbk
  2. #练习类的建立
  3. class vehicle():
  4. #构造方法
  5.                 def __init__(self,speed):
  6.                                 self.speed = speed
  7. #驾驶方法
  8.                 def drive(self,distance):
  9.                                 time = distance/self.speed
  10.                                 print '需要的驾驶时间是:%d'%time
  11. #自行车
  12. class Bike(vehicle):
  13.                 pass
  14. #汽车
  15. class Car(vehicle):
  16.                 def __init__(self,speed,fuel):
  17.                                 vehicle.__init__(self,speed)
  18.                                 self.fuel = fuel
  19.                 def drive(self,distance):
  20.                                 vehicle.drive(self,distance)
  21.                                 fuelcount = distance/100*self.fuel
  22.                                 print '您开的是汽车,需要耗油%d升'%(fuelcount)
  23.        
  24. #测试-------------
  25. bike = Bike(2)
  26. bike.drive(100)
  27. car = Car(100,7)
  28. car.drive(100)
复制代码
回复

使用道具 举报

0

主题

1

好友

132

积分

注册会员

Rank: 2

发表于 2015-12-10 17:20:32 |显示全部楼层
get
回复

使用道具 举报

0

主题

0

好友

200

积分

中级会员

Rank: 3Rank: 3

发表于 2015-12-17 00:40:18 |显示全部楼层
本帖最后由 周末晒被子 于 2015-12-17 00:49 编辑

先生,我对__init__函数还是有点疑问,我试着在49课的例子改一下:

class Car:
    def _init_(self,speed):
        self.speed=speed
   
    def drive(self, distance):
        time = distance / self.speed
        print time

car1 = Car(30)                      #就是这一行报错了
car1.speed = 60.0
car1.drive(100.0)
car1.drive(200.0)

报错:TypeError: this constructor takes no arguments  为什么呢

这两天因为课程有点难,有点畏惧,但是我并不是天才啊,难就难吧。感谢先生这么良心的课程。
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-12-17 14:19:10 |显示全部楼层
周末晒被子 发表于 2015-12-17 00:40
先生,我对__init__函数还是有点疑问,我试着在49课的例子改一下:

class Car:

__init__是两个下划线,内置函数都是两个下划线
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

GMT+8, 2024-3-29 04:04 , Processed in 0.017743 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部