python3類中的Cat變數使用有限制嗎?
看到cat我相信小夥伴就會想到dog,畢竟我們前兩篇剛剛講說。cat和dog的用法差不多,相信本次小夥伴們的學習會進行的非常順利。本期我們也會從最基本的定義講起,等大家瞭解的基本的用法,再進行程式碼的實戰教學。內容篇幅比較長,不過小編相信大家的實力都是沒有問題的。
這裡定義了Cat類和它的子類Blackcat,主要說明兩個主題:私人屬性、方法的繼承與覆蓋
私人屬性的使用是受到一定限制的,這裡主要說明在哪些地方可以用,哪些地方不能呼叫
因為子類繼承父類時,會將父類的所有方法都繼承過來,但是如果在子類中定義了一個和父類同名的方法,則會將父類的方法覆蓋下去,__init__也是如此
定義類
class Cat(Animal): def __init__(self, weight): # 覆蓋了父類的__init__,所以定義例項時不需要指定name和age self.__weight = weight self._weight = weight + 1 self.weight = self._weight + 1 def get_myweight(self): print("My weight is", self._weight, "kg") def get_trueweight(self): print("Actually the cat's weight is",self.__weight) @staticmethod def print_cat(): print("這個類是Animal類的子類,也是Blackcat類的父類") print("Cat類和Blackcat類結合,主要用於講解私人屬性、方法的繼承與覆蓋") print("weight是普通屬性,可以在外部訪問,即用類呼叫屬性獲得,可以被子類內部呼叫") print("_weight這樣前面加一個下劃線表示希望你不要在外部訪問它,但是還是可以訪問的,可以被子類內部呼叫") print("__weight這樣加兩個下劃線的是不允許外部訪問的,只可以在類中被呼叫,不可以被子類內部呼叫") print("__init__在子類中定義則覆蓋了父類中的__init__,不需要指定父類中的屬性,也無法呼叫父類的屬性") print("在子類中實現和父類同名的方法,也會把父類的方法覆蓋掉") class Blackcat(Cat): def get_weight(self): print("My weight is", self.weight) def get_weight_again(self): # 可以 print("Actuall my weight is", self._weight) def get_true_weight(self): # 這個方法因為無法呼叫self.__weight所以這個方法無法使用 print("My weight is exactly", self.__weight) def get_trueweight(self): # 覆蓋了Cat父類中定義的方法 print("My weight is exactly", self._weight+1)
建立例項
# 測試私人變數的外部訪問 cole = Cat(5) cole.weight # 7 cole._weight # 6 cole.get_trueweight() # 在類中引用__weight,用這個方法返回 # Actually the cat's weight is 5 cole._Cat__weight # 非要訪問也可以,其實是python直譯器把__weight改成了_Cat__weight # 5 # 測試私人變數的子類呼叫 cain = Blackcat(5) cain.get_weight() # My weight is 7 cain.get_weight_again() # Actuall my weight is 6 # cain.get_true_weight() # 報錯 # 測試方法的繼承與覆蓋 cain.get_myweight() # # My weight is 6 kg cain.get_trueweight() # 子類中同名函式覆蓋父類 # My weight is exactly 7
以上就是python3類中的Cat變數的使用,具體的測試方法都在上面,大家可以逐個程式碼複製測試,相信大家都可以成功測試出結果,小編在這裡等待大家的互動~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1762/viewspace-2832235/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python中關鍵字引數的個數有限制嗎?Python
- Java中變數之區域性變數、本類成員變數、父類成員變數的訪問方法Java變數
- 動畫:「變數提升」原理中的變數真的進行提升了嗎?動畫變數
- MySQL whereIn 有最大限制嗎?MySql
- Python中類變數、成員變數、區域性變數的區別Python變數
- ruby中的類例項變數和例項的例項變數變數
- 使用類繼承還是類的成員變數繼承變數
- PL/SQL變數值可變在程式中會變嗎?SQL變數
- go 突破訪問限制,訪問其他包中的私有變數Go變數
- 子父類中成員變數變數
- 筆試題 類中static變數筆試變數
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- Java中的類(好似結構體) 物件(好似指標變數)變數 方法Java結構體物件指標變數
- mysql中自定義變數有哪些MySql變數
- python3父類需要繼承object嗎?Python繼承Object
- oracle中sequence使用的限制Oracle
- [轉載] .NET 中可以有類似 JVM 的幻像引用嗎?JVM
- 如何理解Python3中的子類和父類?Python
- Animal如何修改python3中的類?Python
- DB2中的限制之二數值的限制 (轉)DB2
- 如何保證一個類中的例項變數不被改變變數
- 使用 Java 讀寫 JMeter 中的變數JavaJMeter變數
- 4、在Shell程式中的使用變數變數
- java類變數Java變數
- angular中定義全域性變數及全域性變數的使用Angular變數
- python中類中 引數的靈活使用Python
- 變數的分類(臨時(本地)變數、環境變數、全域性變數和系統變數)變數
- 限制使用者使用session數Session
- sql loader的控制檔案可否使用變數variable嗎SQL變數
- c++中的變數型別_C ++中的變數C++變數型別
- 淺談Java類中的變數初始化順序Java變數
- JS中的類很難嗎?JS
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- Excel有類似“分列”的“分行”功能嗎?Excel
- Java 變數種類Java變數
- Android中全域性變數與區域性變數的使用總結Android變數
- 限制oracle資料庫例項中的使用者(user)總數Oracle資料庫
- mysql中雜湊索引的使用限制MySql索引