'''
添加注解,可以实现方法当做变量调用
'''
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)