python基础 day24 面向对象——封装

一、内容回顾

1、命名空间

  • 在类命名空间里:静态变量,绑定方法

  • 在对象的命名空间里:类指针,对象的属性(实例变量)

  • 调用习惯

    • 类名.静态变量

    • 对象.静态变量(对象调用静态变量时,不能对变量进行赋值操作)

    • 绑定方法

      • 对象.绑定方法()

    • 实例变量:

      • 对象.实例变量

2、组合

  • 一个类的对象,是另一个类对象的属性

  • 两个类之间有什么有什么的关系——》班级有学生,班级有课程,图书有作者

二、今日内容

1、封装

-

2、继承

class A:
   pass
class B(A):
   pass
#B继承A :A是父类(基类,超类),B是子类(派生类)
  • 子类可以使用父类中的静态变量和方法

  • 当子类和父类的方法重名时,只使用子类的方法

  • 当需要使用父类方法时,调用方法:父类名.方法(self)

  • 父类和子类方法的选择

    • 子类的对象,如果调用方法

    • 永远优先调用自己的

    • 如果自己有,用自己的

    • 自己没有,用父类的

    • 如果自己有,还想用父类的,直接在子类方法中调父类的方法:父类名.方法(self)

class Base:
   def __init__(self, name):
       self.name = name
   def eat(self):
       print('吃老爸的')

   def drink(self):
       print('喝水')

   def sleep(self):
       print('睡觉')
       
class Cat(Base):
   def eat(self):
       print("吃自己的")
       Base.eat(self) #调用父类的同名方法
   def uptree(self):
       print('爬树')

class Dog(Base):
   def caretaker(self):
       print('看家')
xb = Cat("小白")
xb.eat()
 
  • 思考题

    #在每一个self调用func的时候,我们不看这句话在哪里执行,只看self是谁
    class Foo:
       def __init__(self):
           self.func
       def func(self):
           print('in foo')
    class Son(Foo):
       def func(self):
           print('in son')
    Son()

  • 子类增加自身的独有属性

    class Base:
       def __init__(self, name):
           self.name = name
       def eat(self):
           print('吃老爸的')
       def drink(self):
           print('喝水')
       def sleep(self):
           print('睡觉')
    class Dog(Base):
       def __init__(self,name,color):
           Base.__init__(self,name) #调用了父类的初始化方法,去完成一些通用属性的初始化
           self.color = color   #派生属性
    xb = Dog('小白','黑色')
    print(xb.__dict__)  #{'name': '小白', 'color': '黑色'}
  • 多继承

    • 不断的往上继承

    • 一个类有多个父类,在调用父类时,调用先继承的父类中的方法或静态变量

      class A:
         def func(self):
             print('in A')
      class B:
         def func(self):
             print('in B')
      class C(B,A):
         pass
      C().func()  #继承 从左到右依次找
      #   in B

    object是所有类的类祖宗

    所有的类都继承object

 

原文地址:https://www.cnblogs.com/iaoyuyuyuhuanghuang/p/14258417.html