python3類中的Cat變數使用有限制嗎?

lotus_ruan發表於2021-09-11

看到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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章