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中对象的属性,可以脱离类型,自己扩展

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

慎重使用

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

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

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

不推荐属性的自由扩展

扫描二维码关注公众号,回复: 2910096 查看本文章

解决方案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='[email protected]'

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



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

猜你喜欢

转载自blog.csdn.net/max_like/article/details/81346581