组合:
解决类与类之间代码冗余问题有两种解决方案:1、继承,2、组合
1、继承:描叙的是类与类之间,什么是什么的关系
2、组合:描叙的是类与类之间的关系,是一种什么有什么的关系
一个类产生的对象,该对象拥有一个属性,这个属性的值来自于另外一个类的对象

 

封装:
1.什么是封装:
装就是把一堆属性存起来,封的概念就把这些属性给隐藏起来

如何把属性隐藏起来,就在属性前面加上__开头(注意不要加__结尾)
注意
其实这种隐藏只是一种语法上的变形,对外不对内
为一个属性名加__开头,会在类定义阶段将属性名统一变形:_自己的类名__属性名

class Foo:
     __x=11111
     def __init__(self,y):
           self.__y=y

     def __f1(self):
           print('Foo.fi)

obj=Foo(2000)
obj.__f1()       #报错

obj._Foo__f1()        #Foo.f1


2.这种语法意义上变形,只在类定义阶段发生一次,类定义之后,新增的__开头的属性都没有变形的效果

3.如果父类不想让子类覆盖自己的方法,可以在方法名前加__开头

class Foo:
     def __f1(self)
            print('Foo.f1')

     def f2(self):
          print('Foo.f2'):
          self.__f1()
  
class Bar(Foo):
     def __f1(self):
           print('Bar.f1')

obj=Bra()
obj.f2()     #Foo.f2      #Foo.f1


为什么要用封装
封装函数属性的目的:把数据属性封装起来,然后需要开辟接口给外部的使用者使用,好处是我们可以在接口之上添加控制逻辑,从而严格控制访问者对属性的操作

class People:
    def __init__(self,name,age):
        self.__name=name
        self.__age=age

    def tell_info(self):
         u=input('user>>: ').strip()
         p=input('pwd>>: ').strip()
         if u == 'egon' and p == '123':
            print(self.__name,self.__age)

p=People('egon',18)
p.tell_info()

2.封装函数属性的目的:为了隔离复杂度













posted on 2018-04-15 22:08  muzinianhua  阅读(57)  评论(0编辑  收藏  举报