在python中我们把相似的一类事物归成一类,这样讲是不是就懂了呢?说到dog这个单词,大家都很熟悉,中文是小狗的意思。所以我们可以把不同种类的狗都归为一类。在python中的dog就类似于这种作用。小编相信这个举例大家都能明白,直接上定义理解了也记不长久,不如找点好玩的乐子博大家一笑。
Dog类是Animal的一个子类,主要讲解三个装饰器进行方法向属性的转换。
转换有两个主要的好处:
一是调用没有参数的方法时不再需要加括号,这样的方法就可以当做属性来看
二是这样定义的属性赋值时可以进行判断,防止无效属性的产生
这样的转换有两种方式:
一种是通过@property装饰器,这个装饰器系列一共三个,如果只是想调用这个方法可以只使用@property这个装饰器
一种是通过property函数
下面是一个例子,一些说明可以在最后面定义的print_dog方法中查看
classDog(Animal):#类的继承 #只使用@property装饰器与普通函数做对比 defeating(self): print("Iameating") @property#用这个装饰器后这个方法调用就可以不加括号,即将其转化为属性 defrunning(self): ifself.age>=3andself.age<130: print("Iamrunning") elifself.age>0andself.age<3: print("Ican'trun") else: print("pleaseinputtrueage") #三种装饰器,可以获取、设置、删除这样定义的属性 @property defcountry(self): returnself._country#注意这个属性之前从来没有定义过,是在下面的setter中定义的 @country.setter#用函数名.setter的装饰器 defcountry(self,value):#设置这个属性的值 self._country=value @country.deleter defcountry(self): print("Theattrcountryisdeleted") #用property函数实现和装饰器相同的功能 defget_city(self): returnself._city defset_city(self,value): self._city=value defdel_city(self,value): delself._city city=property(get_city,set_city,del_city,"whereitisin") @staticmethod defprint_dog(): print("这是Animal的一个子类,主要讲解三个装饰器进行方法向属性的转换") print("类继承,创建实例时仍要指定父类的普通属性") print("@property装饰器将方法转化为属性方式调用,此时的方法必须只有一个self参数") print("使用@property后可以看做一个属性(country),用property函数可以达到相同的效果(city)") print("注:city中property第四个参数只是一个说明,用Dog.city.__doc__来调用,即返回whereitisin")
创建实例
david=Dog("David",2)#创建实例 #只用@property的情形 david.eating()#调用普通方法 #Iameating david.running#用过@property装饰器后不需要加括号 #Ican'trun dean=Dog("Dean",4) dean.running#在@property的属性中进行判断 #Iamrunning #@property等三个装饰器 david.country="America" print(david.country) deldavid.country#如果这里的不出现_country则这样就可以删除,但是用self.country则真的变成了属性,所以为了区别多定义了一个_country deldavid._country#如今需要再把这个中间变量删除掉才可以 #无法再调用david.country #不用装饰器,用函数的形式 david.city="Beijing" print(david.city)#Beijing
在Python3类中dog转化的方法就讲到这里了,一种装饰器,一种函数的方法任由小伙伴们选择,小编在这里只作最常规的讲解,具体的使用还要大家亲自上手。