前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >八、python学习笔记-面向对象-类属性

八、python学习笔记-面向对象-类属性

原创
作者头像
堕落飞鸟
发布2022-01-14 09:16:59
1910
发布2022-01-14 09:16:59
举报
文章被收录于专栏:飞鸟的专栏
代码语言:javascript
复制
# 类的属性(特性)
"""
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档