属性封装是为了防止外部程序直接访问类的内部变量,其他的语言我们一般使用get set方法,Python当然也可以用,如代码:
class student:
def set_name(self,value):
self.student_name=value
def get_name(self):
return self.student_name
def set_age(self,value):
self.student_age=value
def get_age(self):
return self.student_age
xiaoming=student()
xiaoming.set_age(18)
xiaoming.set_name("小明")
age=xiaoming.get_age()
name=xiaoming.get_name()
print("%s是一个学生,今年%d岁了"%(name,age))
输出
小明是一个学生,今年18岁了
当然python提供了更好的封装方法:装饰器,可以直接将类方法转换为变量:
class student:
@property
def name(self):
return self.myName
@name.setter
def name(self, value):
self.myName = value
@property
def age(self):
return self.myAge
@age.setter
def age(self,value):
self.myAge=value
xiaoming=student()
xiaoming.age=18
xiaoming.name="小明"
age=xiaoming.age
name=xiaoming.name
print("%s是一个学生,今年%d岁了"%(name,age))
输出
小明是一个学生,今年18岁了
@property可以直接将一个方法伪装为一个变量,只能带self参数
@*.setter可以修改property定义的变量,除了self,只能带一个参数