python 面向对象 封装

12.2 面向对象的三大特征

12.2.1 封装

面向对象的封装:将属性和方法封装到一个类多个类,需要使用的时候,调用这些属性和方法

封装数据:主要原因是:保护私隐,明确区分内外。将数据隐藏起来这不是目的。隐藏起来然后对外提供操作该数据的接口,然后我们可以在接口附加上对该数据操作的限制,以此完成对数据属性操作的严格控制

class User(object): 
def __init__(self, name, age, gender, tel): 
self.__name = name 
self.__age = age 
self.__gender = gender 
self.__tel = tel 
def __str__(self): 
return "name=" + self.__name
 #如何让外部访问到私有的属性 
 getter setter 
 # 提供公开的get方法访问 
def get_name(self): 
return self.__name 
# 提供公共的set方法修改
 def set_name(self, username): 
 self.__name = username 
 def get_age(self): 
 return self.__age 
 def set_age(self, age): 
 self.__age = age
  if __name__ == '__main__': 
  u = User("张三", 18, "男", "110") 
  # print(u) 
  print(u.get_name())
   # print(u.age) 
   u.name = "lisi"
   print(u.name)

封装的第二种方法:property()

class User(object): 
def __init__(self, name, age, gender, tel): 
self.__name = name 
self.__age = age 
self.__gender = gender 
self.__tel = tel def __str__(self): 
return "name=" + self.__name 
#如何让外部访问到私有的属性 
getter setter 
# 提供公开的get方法访问 
def get_name(self): 
return self.__name 
# 提供公共的set方法修改 
def set_name(self, username): 
self.__name = username 
def get_age(self): 
return self.__age 
def set_age(self, age): 
self.__age = age 
#获取值的时候调用property()的第一个参数 
name = property(get_name, set_name) 
age = property(get_age, set_age) 
if __name__ == '__main__': 
u = User("张三", 18, "男", "110") 
print(u) u.name = "lisi"
 print(u) 
 # print(u.get_name()) 
 # print(u.age) 
 # u.name = "lisi" 
 # print(u.name) 
 # u.set_name("lisi") 
 # print(u.get_name())

封装的第三种方式:装饰器 @property

class User(object):
 def __init__(self, name, age, gender, tel): 
 self.__name = name 
 self.__age = age 
 self.__gender = gender
  self.__tel = tel 
def __str__(self):
return "name=" + self.__name
@property def name(self):
 return self.__name 
 @name.setter 
 def name(self, username): 
 self.__name = username 
 #如何让外部访问到私有的属性 
 getter setter 
 # 提供公开的get方法访问 
 # def get_name(self): 
 # return self.__name 
 # 提供公共的set方法修改 
 #def set_name(self, username): 
 # self.__name = username 
 def get_age(self):
  return self.__age 
  def set_age(self, age): 
  self.__age = age 
  #获取值的时候调用
  property()的第一个参数
   # name = property(get_name, set_name)
    # age = property(get_age, set_age)
     if __name__ == '__main__': 
     u = User("张三", 18, "男", "110") 
     print(u.name) u.name = "lisi" 
     print(u) 
     # print(u.get_name()) 
     # print(u.age) 
     # u.name = "lisi" 
     # print(u.name) 
     # u.set_name("lisi") 
     # print(u.get_name())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值