# 类的属性(特性)
"""
1、定义方式类似于方法
2、通过@property声明
3、调用方式类似于变量
4、可以有返回值
5、执行调用、赋值,删除操作并不是真的执行了调用、赋值和删除,只是找到了对应的方法,执行方法中的命令,执行什么命令由你自己决定。只是让方法的操作变得类似于变量
"""
# 示例1,定义、调用方式
class Foo1:
@property # 声明为类的属性
def bar(self):
print('property')
foo1 = Foo1() # 类的实例化
foo1.bar # 如果是方法调用应该是foo.bar(),类的属性调用更类似于变量
# 示例2、返回值
class Foo2:
@property # 声明为类的属性
def bar(self):
return 'property'
foo2 = Foo2()
r = foo2.bar # 如果是方法调用应该是foo.bar(),类的属性调用更类似于变量
print(r)
# 示例3、赋值
class Foo3:
@property # 声明为类的属性
def bar(self):
return 'property'
@bar.setter
def bar(self, val):
print(val)
foo3 = Foo3()
r = foo3.bar # 如果是方法调用应该是foo.bar(),类的属性调用更类似于变量
print(r) # 打印当前返回值
foo3.bar = '重新赋值' # 重新赋值,只是走了@bar.setter下面的bar方法,并不是真实的赋值
r = foo3.bar # 如果是方法调用应该是foo.bar(),类的属性调用更类似于变量
print(r)
# 示例4、删除值
class Foo4:
@property # 声明为类的属性
def bar(self):
return 'property'
@bar.setter
def bar(self, val):
print(val)
@bar.deleter
def bar(self):
print("删除值")
foo4 = Foo4()
r = foo4.bar # 如果是方法调用应该是foo.bar(),类的属性调用更类似于变量
print(r) # 打印当前返回值
foo4.bar = '重新赋值' # 重新赋值,只是走了@bar.setter下面的bar方法,并不是真实的赋值,执行了里面的print
r = foo4.bar # 如果是方法调用应该是foo.bar(),类的属性调用更类似于变量
print(r)
del foo4.bar # 删除,只是走了@bar.delete下面的bar方法,并不是真实的删除,,执行了里面的print
r = foo4.bar # 如果是方法调用应该是foo.bar(),类的属性调用更类似于变量
print(r)
"""
第二种写法,功能是一样的
变量调用走的是fget对应的f1方法,并不是真正的调用变量
变量赋值走的是gset对应的f2方法,并不是真正的变量赋值
删除变量走的是fdel对应的f3方法,并不是真正的删除变量
"""
class Foo5:
def f1(self):
return 'property'
def f2(self, val):
print('property set')
def f3(self):
print('property delete')
bar = property(fget=f1, fset=f2, fdel=f3) # 可以简写为bar = property(f1, f2, f3)
foo5 = Foo5()
print(foo5.bar)
foo5.bar = '重新赋值'
del foo5.bar
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。