Python OOP實現

OOP(面向對象編程)的思想在不少語言中都已經很成熟了, 在Python裏, 也支持這種編程方式
面向編程裏面的幾個概念: 類, 對象, 屬性, 方法,下面就用例子看一下如何實現python

類, 對象(實例)

class Classname(object):

關鍵字class, 括號中的object表是Classname類繼承的類, 默認都至少要繼承一個叫object的類編程

好比要定義一個學生類:函數

class Student():
    pass

這裏咱們僅僅是定義了一個類, 並未作任何實際的工做code

那如何使用一個類呢, 固然要實例化這個類了對象

s = Sutdent()
print s #<__main__.Student object at 0x7fb60ad6c450>

那這個s 其實就是這個類的一個對象(實例),繼承

屬性

這個其實就是類中的一些變量, 能夠外部賦值, 也可內部定義, 假設咱們外部定義某個Student實例的名字get

s.name = "Yi_Zhi_Yu"
print s.name #Yi_Zhi_Yu

在類內部定義it

class Student():
    name = "Yi_Zhi_Yu"
 
s = Sutdent()
print s.name #Yi_Zhi_Yu

方法

類的方法, 表示類的對象能夠進行的操做面向對象編程

class Student():
    name = "Yi_Zhi_Yu"
    
    def set_name(self, name):
        self.name = name
   
    def get_name(self)
        return self.name
 #實例化
 s = Sutdent()
 s.set_name("Tony")
 print s.get_name() #Tony

注意, 類中的每一個方法定義的時候都至少要帶一個參數 self, 他表明的是綁定的實例, 即方法中要操做的對象, 這個和PHP很不同, 假如不帶這個self 參數class

def get_name()
        return "Tony" 
print s.get_name()    
#TypeError: get_name() takes no arguments (1 given)

會報錯, 還說已經傳遞了一個給get_name, 實際上這個1 given 就是對象, get_name中須要有個參數接收, 就是self, 因此實際上這個self也能夠用其餘名稱代替, 由於他僅僅是個參數名

def get_name(m):
    return m.name      
print s.get_name() # Tony

這個self也僅僅是在定義方法時帶, 實際調用的時候要省略, 爲何的緣由就是上面說的, 會自動傳遞進去

另外在說一個特殊的方法, 在實例化類的時候, 每每須要在實例的時候就執行某些操做, 在PHP中叫構造函數, 那python中呢: __init__

這裏順便把完成的類代碼寫下來

class Student():
    name = ""

    def __init__(self, name): #天然要帶self
        self.name = name

    def set_name(self, name):
        self.name = name

    def get_name(m):
        return m.name
 
 s = Student("Yi_Zhi_Yu")
 print s.get_name() #Yi_Zhi_Yu

模塊與類

咱們寫好了上面的類, 文件名稱叫student.py, 如何被其餘模塊引入呢
第一種方式

import student
s = student.Student("Yi_Zhi_Yu")
print s.get_name() #Yi_Zhi_Yu

另外一種方式

from student import Student
s = Student("Yi_Zhi_yu")
print s.get_name()

其實, 第二種方式是用於引入某個模塊的某些函數或類或變量, 而不是徹底引入,好比, 咱們在上面的student模塊文件的Student類外層添加一個函數

def f_i_test():
      print "Hello World"

當咱們須要這個模塊中的這個函數,而不須要Student類的時候, 就可使用

from student import f_i_test
f_i_test() #Hello World
相關文章
相關標籤/搜索