封装 enclosure 多态polymorphic 函数重写cverwrite 以及对象管理函数

封装 enclosure
   封装是指隐藏类的实现细节,让使用者不关心这些细节
   封装的目的是让使用者通过 尽可能少的方法(或属性)操作对象
私有属性和方法
  python类中,以双下划线('__')开关,不以双下划线结尾的标识符为私有成员,私有成员只能使用该类的方法来进行访问和修改
    1,以__开关的属性为私有属性
    2,以 __开关的方法为私有方法


多态
   字面意思:‘多种状态'
   多态是指在有继承/派生关系的类中,调用基类对象的方法,实际能调用子类的覆盖方法的现象叫多态

状态 
   静态(编译时状态)
   动态 (运行时状态)
说明
  多态调用的方法与对象相关,不写类型相关
  python全部对象都只有‘运行时状态(动态)’
  没有‘C++语言’里的编译时状态(静态)
#动态
class Shape:
    def draw(self):
        print('shape的draw()被调用')
    
class Point(Shape):
    def draw(self):
        print('正在画一个点')

class Circle(Point):
    def draw(self):
        print('正在画一个圆')
    
def my_draw(s):
    s.draw()

s1=Circle()
s2=Point()
my_draw(s1)
my_draw(s2)
View Code

 

面向对象编程语言的特征:
    继承
    封装
    多态


多继承 multiple inheritance
  多继承是指一个子类继承自两个或两个以上的基类
  语法
    class 类名(基类1,基类2...)
  说明
    一个子类同时继承自多个父类,父类中的方法可以同时被继承下来如果两个父类中有同名的方法,而在子类中又没有覆盖此方法时,调用结果难以确定

多继承的问题(缺陷)
  标识符冲突问题
    (谨慎使用多继承)

多继承的MRO(method Resolution Order)问题
  python3的类的__mro__属性
    作用:用来记录类的方法
  
函数重写
  什么是函数重写
    在自定义的类内添加相应的方法,让自定义的类创建的实例能够使用内建函数进行操作

对象转字符串函数
  repr(x) 返回一个能表示python对象的表达式字符串,通常
    eval(repr(obj))==obj
  str(x) 通过给定的对象返回一个字符串(这个字符串通常供人阅读)
  示例
    s="I'm Teacher"

对象转字符串函数的重写方法:
  repr() 函数的重写方法:  
    def __repr__(self): #此方法返回来的字符串一定是能表示self对象的表达式字符串
        return 字符串

  str() 函数的重写方法:
    def __str__(self):
       return 字符串

  str(obj)函数调用方法说明:
    1.str(obj)函数先查找obj.__str__(方法)
      调用此方法并返回结果
    2.如果obj.__str__()
      方法不存在,则调用obj.__repr__方法并返回结果
    3.如果obj.__repr__方法不存在,则调用
      object类的__repr__实例方法显示<__main___.xxx object at 0xXXXXX>格式的字符串
  

对象的属性管理函数
  getattr(obj,name[,default])
    从一个对象用字符串name得到对象的属性,getattr(x,'y')等同于x,y,当属性不存在时,如果给定default参数则返回default,如果没有给出default,则触发一个AttributeError错误
  hasattr(obj,name)
    用给定的name字符串返回obj是否有此属性,此种做法可以避免在getattr(obj,name)时引发错误
  setattr(obj,name,value)
    给对象obj的名为name的属性设置相应的值value,setattr(x,'y',v),等同于,x-y=v
  delattr(obj,name)删除对象obj中的name属性 del(x,'y')等同于del x,y

 

 

---恢复内容结束---

posted @ 2018-08-27 14:54  Sky__liu  阅读(232)  评论(0)    收藏  举报