Python中物件導向程式設計的一些高階方法拾遺
其他關於Python的總結文章請訪問:https://blog.csdn.net/qq_38962621/category_10299380.html
Python中物件導向程式設計的一些高階方法拾遺
宣告類中的私有變數
定義類中的私有變數,只要將變數名前加雙下劃線即可__
,如果一個變數名以__
開頭,它就是一個私有變量(private),只能在類內部訪問,不能外部訪問(比如__name
)。
但是開頭結尾都有雙下劃線__
的變數是特殊變數,特殊變數是可以直接訪問的,不是private變數,所以不要定義這種變數(比如__name__
)
但但是,其實雙下劃線的變數是可以訪問的,需要使用 單下劃線+類名+雙下劃線的變數名
訪問(比如Student
類中的__name
變數,可以使用 instance._Student__name
來訪問的),但是既然設定成了私有變數,那就是不想讓訪問,一定要這麼做是沒有什麼特別的好處的。
例項屬性與類屬性
定義在類中的 __init__
函式中的變數(比如self.name
)是屬於例項的,即每一個例項都有自己的 self.name
。而定義在類中,__init__
函式外部(前)的變數則是屬於類自己的變數,比如這樣定義的變數:
class Student(object):
name = 'Student'
屬於類的屬性是不會因例項而異的,所有例項都擁有同樣的類屬性。
限制給例項新增的屬性
動態語言中,可以給物件(object
)動態新增屬性,比如一個student
例項,可以臨時新增 student.name
的屬性,或者給Student
類動態新增屬性 Student.name
,使用 __slots__
可以限制給一個類的實力新增的屬性:
class Student():
__slots__ = ('name', 'age')
這樣一來Student
的例項就只能動態新增name
和age
兩個屬性,新增其他的會報錯:
student = Student()
student.name = "Hello"
student.age = 12
student.score = 100 # Raise AttributeError: 'Student' object has no attribute 'score'
使用@property將方法“變為”屬性
類中,通常為了不暴露一些變數,或者對一些變數的做限制,會猜用定義一個私有變數(比如score
),然後使用兩個方法:一個get方法來獲取變數值(比如get_score
)和一個set方法來修改變數的值(比如set_score
)來完成。使用時需要呼叫兩個方法。
使用裝飾器 @property
可以更簡單的做到這一點,它可以將一個方法“變成”屬性:
- 只使用
@property
定義只讀屬性:
class Student():
@property
def name(self):
return "Lily"
student = Student()
print(student.name)
- 使用
@property
和配套產生的@NAME.setter
來定義可讀屬性:
class Student():
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
student = Student()
student.name = "Lily"
print(student.name)
多重繼承
Python支援多重繼承,即一個子類可以繼承自多個父類,只要在子類的括號中傳入多個要繼承的父類即可:
class Student():
pass
class Teacher():
pass
class Someone(Student,Teacher):
pass
相關文章
- 物件導向拾遺物件
- Python學習之物件導向高階程式設計Python物件程式設計
- C++ 物件導向高階設計C++物件
- 章10——物件導向程式設計(高階部分)——類名類方法物件程式設計
- 章10——物件導向程式設計(高階部分)——抽象類物件程式設計抽象
- 物件導向程式設計的一些思考物件程式設計
- Python物件導向程式設計Python物件程式設計
- Python 物件導向程式設計Python物件程式設計
- JavaScript 中的物件導向程式設計JavaScript物件程式設計
- JAVA物件導向高階二:抽象類的應用--模板方法設計模式Java物件抽象設計模式
- 【廖雪峰python進階筆記】物件導向程式設計Python筆記物件程式設計
- Python OOP 物件導向程式設計PythonOOP物件程式設計
- Python - 物件導向程式設計 - @propertyPython物件程式設計
- Python - 物件導向程式設計 - super()Python物件程式設計
- python技能--物件導向程式設計Python物件程式設計
- Python物件導向程式設計(1)Python物件程式設計
- Python之物件導向程式設計Python物件程式設計
- python學習之物件導向程式設計的一些思考Python物件程式設計
- Java——物件導向程式設計的一些總結Java物件程式設計
- Python - 物件導向程式設計 - 例項方法、靜態方法、類方法Python物件程式設計
- 從零學Python:17課-物件導向程式設計(進階)Python物件程式設計
- 物件導向程式設計物件程式設計
- python物件導向程式設計基礎Python物件程式設計
- python基礎(物件導向程式設計)Python物件程式設計
- 史上最全 Python 物件導向程式設計Python物件程式設計
- python之物件導向程式設計(一)Python物件程式設計
- 圖解python | 物件導向程式設計圖解Python物件程式設計
- 14 Python物件導向程式設計:反射Python物件程式設計反射
- Python - 物件導向程式設計 - MRO 方法搜尋順序Python物件程式設計
- 全網最適合入門的物件導向程式設計教程:00 物件導向設計方法導論物件程式設計
- [.net 物件導向程式設計進階] (3) 正規表示式 (二) 高階應用物件程式設計
- Scala的物件導向程式設計物件程式設計
- JS物件導向的程式設計JS物件程式設計
- javascript:物件導向的程式設計JavaScript物件程式設計
- [.net 物件導向程式設計進階] (1) 開篇物件程式設計
- iOS 開發之 OOA (物件導向分析) & OOD (物件導向設計)& OOP (物件導向程式設計)iOS物件OOP程式設計
- [.net 物件導向程式設計基礎] (2) 關於物件導向程式設計物件程式設計
- Python進階之物件導向(類的特殊方法)Python物件