1. 程式人生 > >類的方法重寫和私有變量

類的方法重寫和私有變量

python

1.類的方法重寫


在python中繼承中的一些特點:

a.在繼承中基類的構造(init()方法)不會被自動調用,它需要在其派生類的構造中親自專門調用。
b.在調用基類的方法時,需要加上基類的類名前綴,且需要帶上self參數變量。區別於在類中調用普通函數時並不需要帶上self參數
c.Python總是首先查找對應類型的方法,如果它不能在派生類(子類即當前類)中找到對應的方法,它才開始到基類(父類)中逐個查找。(先在本類中查找調用的方法,找不到才去基類中找)。
d.由上面的關系,可以進行方法的重寫,在子類中重寫父類方法。


例子:

class A:

def output(self):

print(‘This is a test case for class A‘)

class B(A):

def output(self):

print(‘This is a test case for class B‘)

b = B()

b.output()


結果:

This is a test case for class B



2.類的私有變量和私有方法

Python中可以通過在屬性變量名前加上雙下劃線定義屬性為私有屬性

特殊變量命名:

1、 _xx 以單下劃線開頭的表示的是protected類型的變量。即保護類型只能允許其本身與子類進行訪問。若內部變量標示,如:當使用“from Mimport”時,不會將以一個下劃線開頭的對象引入。

2、 __xx 雙下劃線的表示的是私有類型的變量。只能允許這個類本身進行訪問了,連子類也不可以用於命名一個類屬性(類變量),調用時名字被改變(在類FooBar內部,__boo變成_FooBar__boo,如self._FooBar__boo)

3、 __xx__定義的是特列方法。用戶控制的命名空間內的變量或是屬性,如init , __import__或是file 。只有當文檔有說明時使用,不要自己定義這類變量。(就是說這些是python內部定義的變量名)

在這裏強調說一下私有變量,python默認的成員函數和成員變量都是公開的,沒有像其他類似語言的public,private等關鍵字修飾.但是可以在變量前面加上兩個下劃線"_",這樣的話函數或變量就變成私有的.這是python的私有變量軋壓(這個翻譯好拗口),英文是(private name mangling.) **情況就是當變量被標記為私有後,在變量的前端插入類名,再類名前添加一個下劃線"_",即形成了_ClassName__變量名.**

Python內置類屬性

__dict__ : 類的屬性(包含一個字典,由類的數據屬性組成)

__doc__ :類的文檔字符串

__module__: 類定義所在的模塊(類的全名是‘__main__.className‘,如果類位於一個導入模塊mymod中,那麽className.__module__等於 mymod)

__bases__: 類的所有父類構成元素(包含了一個由所有父類組成的元組)


例子:

class Student(object):

_name = "huang"

__sex = "male"

def hello(self):

print(self._name)

print(self.__sex)

def get_value(self):

return self.__sex

a = Student()

print (a.hello())

print (a.get_value())

結果:

huang

male

None

male



類的方法重寫和私有變量