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.name
def 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