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
-