python 高级封装

'''

添加注解,可以实现方法当做变量调用

'''

class User:

    def __init__(self,name):

        self.__name=name



    @property

    def name(self):

        return self.__name



    @name.setter

    def name(self,name):

        self.__name=name



u=User('tom')

print(u.name)

u.name='汤姆'

print(u.name)



输出结果:

tom

汤姆

 

 

自定义拓展属性

 python中对象的属性,可以脱离类型,自己扩展

强大的功能,但是同时也是一种极度破坏代码完整性的功能

慎重使用

 

这样属性的扩展操作:其实是一种非常强大的功能

但是由于软件开发一般都是多人协同开发

如果让属性自由处理——不同的开发人员可能会定义不同的名称,造成开发代码的混乱

不推荐属性的自由扩展

解决方案1:开发之前就分析规定好,类型都有那些属性!不允许扩展!

问题:属性浪费!

class User:

def __init__(self, name, age, gender, email..)

正常情况下,我只需要一个name

个别情况下才会需要age,gender,email

全部都写在类型中,有点麻烦!

解决方案2:

限制属性!请参考代码下面代码

'''

对象拓展,可以再对象外添加属性,若在类中有__slots__

则只能添加__slots__列表中的属性

'''



class User:



    __slots__=['__name','age','sex','email','phone']

    def __init__(self,name):

        self.__name=name



    def get_name(self):

        return self.__name



    def set_name(self,name):

        self.__name=name



    name=property(get_name,set_name)

u=User('tom')

u.age='20'

u.email='likeshuai@126.com'

#u.address='河南' #因为在__slots__中没有address,所以会报错,不能拓展 AttributeError: 'User' object has no attribute 'address'



print(u.name,u.age,u.email)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值