您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
小编给大家分享一下python3类中的Dog如何用来转化,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
Dog类是Animal的一个子类,主要讲解三个装饰器进行方法向属性的转换。
转换有两个主要的好处:
一是调用没有参数的方法时不再需要加括号,这样的方法就可以当做属性来看
二是这样定义的属性赋值时可以进行判断,防止无效属性的产生
这样的转换有两种方式:
一种是通过@property装饰器,这个装饰器系列一共三个,如果只是想调用这个方法可以只使用@property这个装饰器
一种是通过property函数
下面是一个例子,一些说明可以在最后面定义的print_dog方法中查看
class Dog(Animal): # 类的继承 # 只使用@property装饰器与普通函数做对比 def eating(self): print("I am eating") @property # 用这个装饰器后这个方法调用就可以不加括号,即将其转化为属性 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") # 三种装饰器,可以获取、设置、删除这样定义的属性 @property def country(self): return self._country # 注意这个属性之前从来没有定义过,是在下面的setter中定义的 @country.setter # 用 函数名.setter 的装饰器 def country(self, value): # 设置这个属性的值 self._country = value @country.deleter def country(self): print("The attr country is deleted") # 用property函数实现和装饰器相同的功能 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的一个子类,主要讲解三个装饰器进行方法向属性的转换") print("类继承,创建实例时仍要指定父类的普通属性") print("@property装饰器将方法转化为属性方式调用,此时的方法必须只有一个self参数") print("使用@property后可以看做一个属性(country),用property函数可以达到相同的效果(city)") print("注:city中property第四个参数只是一个说明,用Dog.city.__doc__来调用,即返回 where it is in")
创建实例
david = Dog("David", 2) # 创建实例 # 只用@property的情形 david.eating() # 调用普通方法 # 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 # 如果这里的不出现_country则这样就可以删除,但是用self.country则真的变成了属性,所以为了区别多定义了一个_country del david._country # 如今需要再把这个中间变量删除掉才可以 # 无法再调用 david.country # 不用装饰器,用函数的形式 david.city = "Beijing" print(david.city) # Beijing
看完了这篇文章,相信你对python3类中的Dog如何用来转化有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。