python学习笔记(四)模块、面向对象

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章