溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python3類中的Dog如何用來轉(zhuǎn)化

發(fā)布時間:2020-11-17 09:43:45 來源:億速云 閱讀:190 作者:小新 欄目:編程語言

小編給大家分享一下python3類中的Dog如何用來轉(zhuǎn)化,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

Dog類是Animal的一個子類,主要講解三個裝飾器進行方法向?qū)傩缘霓D(zhuǎn)換。

 轉(zhuǎn)換有兩個主要的好處:

 一是調(diào)用沒有參數(shù)的方法時不再需要加括號,這樣的方法就可以當做屬性來看

二是這樣定義的屬性賦值時可以進行判斷,防止無效屬性的產(chǎn)生

這樣的轉(zhuǎn)換有兩種方式:

 一種是通過@property裝飾器,這個裝飾器系列一共三個,如果只是想調(diào)用這個方法可以只使用@property這個裝飾器

一種是通過property函數(shù)

下面是一個例子,一些說明可以在最后面定義的print_dog方法中查看

class Dog(Animal): # 類的繼承
    
    # 只使用@property裝飾器與普通函數(shù)做對比
    def eating(self):
        print("I am eating")
    
    @property # 用這個裝飾器后這個方法調(diào)用就可以不加括號,即將其轉(zhuǎn)化為屬性
    def running(self):
        if self.age >= 3 and self.age < 130:
            print("I am running")
        elif self.age > 0 and self.age <3:
            print("I can't run")
        else:
            print("please input true age")
            
    # 三種裝飾器,可以獲取、設(shè)置、刪除這樣定義的屬性
    @property
    def country(self):
        return self._country # 注意這個屬性之前從來沒有定義過,是在下面的setter中定義的
    
    @country.setter # 用 函數(shù)名.setter 的裝飾器
    def country(self, value): # 設(shè)置這個屬性的值
        self._country = value
        
    @country.deleter
    def country(self):
        print("The attr country is deleted")
        
        
    # 用property函數(shù)實現(xiàn)和裝飾器相同的功能
    def get_city(self):
        return self._city
    
    def set_city(self, value):
        self._city = value
        
    def del_city(self, value):
        del self._city
        
    city = property(get_city, set_city, del_city, "where it is in")
        
    @staticmethod
    def print_dog():
        print("這是Animal的一個子類,主要講解三個裝飾器進行方法向?qū)傩缘霓D(zhuǎn)換")
        print("類繼承,創(chuàng)建實例時仍要指定父類的普通屬性")
        print("@property裝飾器將方法轉(zhuǎn)化為屬性方式調(diào)用,此時的方法必須只有一個self參數(shù)")
        print("使用@property后可以看做一個屬性(country),用property函數(shù)可以達到相同的效果(city)")
        print("注:city中property第四個參數(shù)只是一個說明,用Dog.city.__doc__來調(diào)用,即返回 where it is in")

創(chuàng)建實例

david = Dog("David", 2) # 創(chuàng)建實例
 
# 只用@property的情形
david.eating() # 調(diào)用普通方法
# I am eating
david.running # 用過@property裝飾器后不需要加括號
# I can't run
 
dean = Dog("Dean", 4)
dean.running # 在@property的屬性中進行判斷
# I am running
 
 
# @property等三個裝飾器
david.country = "America"
print(david.country)
del david.country # 如果這里的不出現(xiàn)_country則這樣就可以刪除,但是用self.country則真的變成了屬性,所以為了區(qū)別多定義了一個_country
del david._country # 如今需要再把這個中間變量刪除掉才可以
# 無法再調(diào)用 david.country
 
# 不用裝飾器,用函數(shù)的形式
david.city = "Beijing"
print(david.city) # Beijing

 

看完了這篇文章,相信你對python3類中的Dog如何用來轉(zhuǎn)化有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI