在 python 中,我们将相似的事物归为一类。这样说有意义吗?说到狗这个词,大家都不陌生。在中文里是小狗的意思。所以我们可以将不同种类的狗归为一类。 python中的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转换方法到此结束。一种装饰器,一种函数方法,就看小伙伴们自己选择了。小编这里只做最常规的解释。具体使用需要自己动手。 .
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python自带pip用不了怎么办?11/03
- ♥ 如何在python中获取当前文件的部分信息?01/06
- ♥ python设置路由配置的解决方法12/29
- ♥ 如何使用python算法解决变化问题?10/25
- ♥ 如何下载安装python3.608/30
- ♥ 为什么python可以多线程12/31
内容反馈