1. 程式人生 > 實用技巧 >python筆記(5)---面向物件(1)

python筆記(5)---面向物件(1)

python面向物件[1]

目錄

類的定義

和所有的面嚮物件語言一樣,python也有其面向物件的管理的方式:class,其基本的模型如下寫法:

class Myclass:
    def __init__(self):
        pass
    def memfun(self):
        pass    

對於上面的類的基本框架可以看出 多了一個關鍵字 class 和一個加了下劃線的函式init

  1. 其中class 關鍵字是類的宣告也就是說是如下的:
class classname:
  1. init()函式類似於其他語言中的建構函式
class father:
     def __init__(self,name,age):
         self.name=name
         self.age=age

如上所示我們建立了一個father類,這個類的建構函式有三個引數 self,name,age(解釋如下):
self:self是對於類中的每一個函式(成員函式建構函式)都要寫的一個關鍵字,寫升self之後才可以緊跟著其他的引數
除了self引數之外的所有引數全部當作普通函式的引數進行對待.

在類中定義一個變數供類中所有的成員函式進行訪問的話,可以寫作,self.name=name,也就是說建立了一個name的變數可以在類中所有的地方訪問,如下所示:

class father:
     def __init__(self,name,age):
         self.name=name
         self.age=age
     def get(self):
         print("My father name is {},age is {}".format(self.name,self.age))

我們定義了一個 get()的成員函式,用於列印father類的姓名和年齡,那麼在類中成員函式中定義引數的時候,也要加上self關鍵字之後然後增加其他的引數(和普通函式一樣).

例項的建立

建立物件

還是上面的father類,我們考慮物件的建立:

f=father("xiaohua",19)

上面的程式碼我們建立了一個father物件,第一個引數代表是father的姓名,第二個引數代表的是father的年齡,這樣就建立了一個物件,注意初始化物件的時候引數的使用和類中的__init__()函式的引數是一樣的,這樣也就解釋了為什麼__init__()函式是建構函式.

物件的使用

假如我們對father類增加了一些功能如下:

class father:
     def __init__(self,name,age):
         self.name=name
         self.age=age
     def get(self):
         print("My father name is {},age is {}".format(self.name,self.age))
     def addage(self): #年齡增加的模組
         self.age+=1

#定義一個father物件
f=father("xiaohong",19)

#呼叫類中的方法採用'.'的形式進行呼叫
f.get() #列印資訊

f.addage() #father年齡增加

類的許可權問題

假如我們定義了一個類 girlfriend 類中有些東西不能再類的使用中被外部使用者看見,比如 girlfriend類中有一個生氣的屬性,這個屬性可以被外部物件看見, 但是girlfriend 類中 生氣的原因的屬性就不能被外部物件可見,但是怎麼進行溝通呢?假如有一個boyfriend類,這個類有一個 Gauss函式用來猜測 girlfriend 為什麼生氣的原因,那麼我們怎麼把girlfriend類的生氣原因的屬性定義為 只對類自己可見呢?

class girlfriend:
    def __init__(self,name,age,p):
        self.name=name
        self.age=age
        self.prop=p #生氣屬性值
        self.__why="happy" #如果不生氣就是happy
    def mad(self):
        #女朋友不生氣的原因只有不到0.1,0.9的時候都在生氣
        if self.prop>0.1:
            return True
        else:
            return False
    #為什麼生氣
    def __why(self):
        if self.mad():
            #因為我也不知道所以返回None
            return None
        else:
            return self.__why

我們使用一下這個類:

    
g=girlfriend("zhenzhen",19,0.01)

g.mad() #生氣了

#檢視原因
#g.why()#error 因為原因是不可以見的

#檢視是否開心

print(g.__why1) #error 生氣的原因都不可見 怎麼可見開心的原因

總結一下:對於一個類想定義對使用者不可見的函式和變數只需要在想定義的變數和函式名稱前寫上 '__'即可如上所示

[注:]

由於python中不同於c和c++的有垃圾回收機制,所以沒有解構函式一說!!