python学习笔记(四)模块、面向对象
来源:互联网 发布:labview编程详解书 编辑:程序博客网 时间:2024/05/21 08:51
import关键字可以将一个python代码文件引入当前文件,其作用类似于c++中的include,这个被引入的代码文件被称为模块(Module)。
from XX import XX是指从一个包中引入某个模块。包(Package)相当于一个目录,但和一般文件目录不同的是,其中必须有一个名为__init__.py的文件,其内容可以为空。import后是模块名,也可以写*,代表引入该包中的所有模块。
开始
前两次可以看出python支持面向过程编程以及函数式编程,而一般现代语言都支持面向对象编程,python也不例外。
面向对象的核心思想是数据与方法的结合。数据和方法都存储在一个数据类型之中。就像之前使用的list类型,append是其方法,表中的变量是其数据。我们可以自己定义一个类型。
1. 创建一个类的方法:
class window(object): def __init__(self,name): self.name = name self.__get_ct = 0 def print_name(self): print self.name self.__get_ct = self.__get_ct+1 def get_count(self): return self.__get_ct
其中object代表其继承的类,是python中所有类型的基类,继承关系稍后说。__init__ 是构造函数,print_name,get_count是成员函数。
在定义类成员函数时,第一个参数必须为self,代表调用这个函数的对象。取用对象的成员变量也要通过self来取得,这一点类似于C++中隐式传入的this指针,只是在python中这个参数变为显示传递。
2 . 私有成员和共有成员
私有的成员即只能在其内部进行访问,在类型的外部是不能访问的。如上代码中的__get_ct就是一个私有成员变量。
声明私有的方法是在变量前加双下划线。一般python中的变量不要随意加下划线,否则容易和一些关键词重复。
3 . 继承
继承即从另外一个类中取得成员,减少成员重复。
class game_wind(window): def __init__(self): self.name = 'fgo' self.__get_ct = 0 def print_name(self): print self.__get_ct#can not use get_count() print'game wind:',self.name
在继承时,如果没有在构造函数中调用父类的构造函数的话,是不能使用父类的成员变量和函数的。
上面要使用get_count,需要在__init__中加一句
window.__init__(self,'fgo')
4 . 多态
多态指的是同一个变量在不同状态下表现出的差异。
class text_wind(window): def print_name(self): print self.get_count() print'text wind:',self.namedef prt(obj): obj.print_name()w1 = window('usr')w2 = game_wind()w3 = text_wind('python')prt(w1)prt(w2)prt(w3)
运行后会发现该函数会根据类型调用不同的print_name函数。这就是多态性。
一点例子
Tkinter是python自带的一个GUI库,可以用来做图形界面。
使用它创建窗口的一个方法是继承其Frame类,再通过自建的类来操作:
from Tkinter import *class Application(Frame): def __init__(self,master = None): Frame.__init__(self,master) self.pack() self.createWidgets() def createWidgets(self): self.helloLabel = Label(self,text = 'Hello') self.helloLabel.pack() self.quitButton = Button(self,text = 'ok',command=self.quit) self.quitButton.pack()app = Application()app.master.title('helloworld')app.mainloop()
参考资料:
廖雪峰python教程:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820044406b227b3e751cc4d5190420d17a2dc6353000
- python学习笔记(四)模块、面向对象
- Python学习笔记(三)——模块|面向对象
- Python学习笔记(三)函数、面向对象、模块发布
- PHP学习笔记(四)面向对象
- java学习笔记(四)面向对象
- Python学习笔记(四)Python对象
- python学习笔记(四)模块
- Python学习笔记(2)--面向对象
- Python学习笔记(九):面向对象
- python学习笔记(面向对象)
- python学习笔记(三)面向对象
- Python学习笔记(四):面向对象、正则表达式(快速入门篇)
- python 学习笔记--面向对象
- Python学习笔记----面向对象
- Python学习14:面向对象编程(四)
- 【python学习】之四、面向对象
- Python学习之路四---面向对象
- javascript学习笔记 (四)-面向对象的实现
- fl2440添加USB驱动,并添加ntfs的写入
- 机器学习笔记(三) 朴素贝叶斯分类
- 拍卖(京东2017实习生招聘真题)
- url中文乱码
- c# 设计模式-单例模式
- python学习笔记(四)模块、面向对象
- 递推求解专题训练
- Pyhon 网络爬虫--简单的爬取功能
- 判断元素在数组中出现的次数
- 高德地图应用试开发--第二版(百度试验号已阵亡)
- 文章标题
- Maven Spring MVC + MyBatis 开发配置
- mysql数据库常用sql的分类整理
- HashMap集合