组合,封装,访问限制机制,property装饰器

组合

1.什么叫组合:

组合指一个对象中,包含另一个或多个对象。

2为什么要用组合:

减少代码的冗余

耦合度:

耦合度越高:程序的可扩展性越低

耦合度越低:程序的可扩展性越高

总结:

继承:是类与类的关系,子类继承父类的属性方法,子类与父类是一种从属关系。

组合:是对象与对象的关系,一个对象拥有另一个对象的属性/方法,是一种什么有什么的关系。

封装

1.什么是封装:

封装指的是可以将一堆属性和方法,封装到对象中。

PS:对象就好比一个容器,可以存放一堆属性方法。

PS:存不是目的,目的是为了取,可以通过对象的方式获取属性或方法。

2.为什么要封装:

可以通过对象的方式,存放/获取属性或方法。

对象拥有.的机制

方便胡数据的存取

访问限制机制

1.什么是访问限制机制:

凡是在类内部定义的属性或方法。

凡是__开头的属性或方法名,都会被限制,外部不能“直接访问”该属性原型。

PS:看着像该属性或方法隐藏起来了。

注意:凡是在类内部定义__开头的属性或方法,都会变形为__类名__属性/方法
2.为什么要有访问限制?
将一些隐私的数据,隐藏起来,不让外部轻易获取
   接口:
  可以将一对数据封装成一个接口,可以让用户调用接口。
       并且通过相应的逻辑,最后再将数据返回给用户。
class User:
   __name = 'tank'
   def __run(self):
       print('tank is runing...')

# print(User.__name)(报错)
obj = User()
print(obj._User__name)

class User:
   __name = 'tank'
   __age = 17
   __sex = 'male'
   __ID = '455454544545454545'
   __bal = 1555555
   def parse_user(self,username,password):
       if username == 'tank_iam' and password == '123':
           print(f'''
      通过验证,获取用户信息。
      用户名:{self.__name}
      用户年龄:{self.__age}
      用户性别:{self.__sex}
      用户ID:{self.__ID}
      用户存款:{self.__bal}
      ''')
       else:
           print('检验失败,无法查询')
   def __run(self):
       print('tank is runing...')
obj = User()
obj.parse_user('tank_iam','123')

property装饰器:

python内置装饰器,可以装饰在类内部的方法上。可以将该方法调用方式由--》对象方法()--》对象方法

为什么用它:

PS:在某些场景下,调用的方法只是用来获取计算后的某个值

PS:必须通过对象方法()方式调用,让该方法看起来像动词

让名词的方法调用时更合理。

目的为了迷惑调用者,调用的方法误以为是属性。

class User:
   def __init__(self,name,weight,heighe):
       self.name = name
       self.height = heighe
       self.weight = weight
   @property
   def bmi(self):
       return self.weight/(self.height**2)
   @property
   def name(self):
       return self.__name
   @name.setter
   def name(self,value):
       self.__name = '123'
user_obj = User('hcy',75, 1.7)
print(user_obj.bmi)
print(user_obj.name)

 

 

posted @ 2019-12-04 18:41  薛定谔的量子猫  阅读(119)  评论(0编辑  收藏  举报