鱼C论坛

 找回密码
 立即注册
查看: 2682|回复: 2

[技术交流] 09 Python面向对象编程

[复制链接]
发表于 2017-6-20 11:08:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 和vvv 于 2017-6-20 12:20 编辑
09 Python面向对象编程

一、面向对象编程概述
面向对象编程即OOP编程,区别于面向过程编程,面向对象编程比较适合开发大项目,会以更接近人类思维的角度去写程序。


二、类和对象
类:具有某种特征的事物的集合(群体)。
对象:群体(类)里面的个体。
类是抽象的,对象是具体的。

类的定义:
  1. class 类名:
  2.     类里面的内容
复制代码
如:
  1. class Student:
  2.     pass
复制代码
其中pass表示占位符,不代表任何操作,只是占据位置。
  1. >>> Student
  2. <class '__main__.Student'>
  3. >>> s = Student()
  4. >>> s
  5. <__main__.Student object at 0x000002B9F35B0E10>
  6. >>>
复制代码
s = Student()是实例化一个类,也就是说,现在s就是一个对象(类的实例就是对象)。

三、构造函数
类在实例化时自动首先触发的方法。其有固定的名字:__init__(self,参数)。在类中的方法必须加上self参数。
  1. class cl:
  2.     def __init__(self):
  3.         print("I am cl self")
复制代码
结果:
  1. >>> c = cl()
  2. I am cl self
  3. >>>
复制代码

构造函数的实际意义:初始化。


给类加上参数,实际上就是在构造方法中加上参数。
  1. class cl1:
  2.     def __init__(self,name,job):
  3.         print("my name is "+name+",my job is "+job)
复制代码
结果:
  1. >>> b = cl1()
  2. Traceback (most recent call last):
  3.   File "<pyshell#9>", line 1, in <module>
  4.     b = cl1()
  5. TypeError: __init__() missing 2 required positional arguments: 'name' and 'job'
  6. >>>
复制代码
类实例化时,没有给定参数,报错。
  1. ======== RESTART: F:\Python\procedure\if.py ========
  2. >>> b = cl1("xiaoming","teacher")
  3. my name is xiaoming,my job is teacher
  4. >>> b1 = cl1("he","python")
  5. my name is he,my job is python
  6. >>>
复制代码
其中b,b1属于同一个类,但是不同的个体。

四、属性和方法
属性:静态的特征,如头发、手臂等。类里面的变量:self.属性名
  1. class cl2:
  2.     def __init__(self,name,job):
  3.         self.myname = name
  4.         self.myjob = job
复制代码
  1. ======== RESTART: F:\Python\procedure\if.py ========
  2. >>> s = cl2("X","teacher")
  3. >>> s.myname
  4. 'X'
  5. >>> s.myjob
  6. 'teacher'
  7. >>>
复制代码

方法:动态的特征,如唱歌、写字等。类里面的函数:def 方法名(self,参数)
  1. class cl3:
  2.     def myf1(self):
  3.         print("hello")
复制代码
结果:
  1. >>>
  2. ======== RESTART: F:\Python\procedure\if.py ========
  3. >>> c = cl3()
  4. >>> c.myf1()
  5. hello
  6. >>>
复制代码
可以给方法加上参数:
  1. class cl3:
  2.     def myf1(self,name):
  3.         print("hello "+name)
复制代码
  1. >>>
  2. ======== RESTART: F:\Python\procedure\if.py ========
  3. >>> c = cl3()
  4. >>> c.myf1("tian")
  5. hello tian
  6. >>>
复制代码

与构造方法一起使用:
  1. class cl3:
  2.     def __init__(self,name):
  3.         self.myname = name
  4.     def myf1(self):
  5.         print("hello "+self.myname)
复制代码
结果:
  1. >>>
  2. ======== RESTART: F:\Python\procedure\if.py ========
  3. >>> c = cl3("Men")
  4. >>> c.myf1()
  5. hello Men
  6. >>>
复制代码

五、继承与重载

继承:把一个类或者多个类(基类)的特征拿过来。
重载:在子类(派生类)里面对继承过来的特征重新定义。
父类:基类。
子类:派生类。

1.继承:包含单继承和多继承。

(1)
  1. #父亲类(基类)
  2. class father():
  3.     def speak(self):
  4.         print("I can speak!")

  5. #单继承:class 子类(父类)
  6. class son(father):
  7.     pass
复制代码
结果:
  1. >>>
  2. ======== RESTART: F:\Python\procedure\if.py ========
  3. >>> s = son()
  4. >>> s.speak()
  5. I can speak!
  6. >>>
复制代码
(2)
  1. #父亲类(基类)
  2. class father():
  3.     def speak(self):
  4.         print("I can speak!")
  5. #母亲类
  6. class mother():
  7.     def write(self):
  8.         print("I can write!")

  9. #女儿类:多继承
  10. class daughter(father,mother):
  11.     def listen(self):
  12.         print("I can listen!")
复制代码
结果:
  1. >>>
  2. ======== RESTART: F:\Python\procedure\if.py ========
  3. >>>
  4. ======== RESTART: F:\Python\procedure\if.py ========
  5. >>> d = daughter()
  6. >>> d.speak()
  7. I can speak!
  8. >>> d.write()
  9. I can write!
  10. >>> d.listen()
  11. I can listen!
  12. >>>
复制代码
2.重载(重写)
  1. #父亲类(基类)
  2. class father():
  3.     def speak(self):
  4.         print("I can speak!")
  5. #重写(重载)
  6.         class son2(father):
  7.             def speak(self):
  8.                 print("I can speak 2!")
复制代码
结果:
  1. >>>
  2. ======== RESTART: F:\Python\procedure\if.py ========
  3. >>> s2 = son2()
  4. >>> s2.speak()
  5. I can speak 2!
  6. >>>
复制代码



评分

参与人数 1鱼币 +6 收起 理由
小甲鱼 + 6 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-5 17:12:00 | 显示全部楼层
不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-12 20:11:01 | 显示全部楼层
加油^=^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 18:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表