复习
命名空间
类和对象之间的关系
类是不能直接找到对象的
对象可以直接找到类 对象(类对象指针)指向类
在对象试用名字的时候,如果对象有自己的,自己没有就用类的
对象对于类中的变量不能重新赋值,如果重新赋值,对象就会在自己的内存中创建一个重名的
新变量
静态变量
是所有的对象共享的值
使用的时候,最好全部用类名调用


组合
一个类中的对象作为另一个类对象的属性
什么有什么的关系


class A:pass
a=A()
a.n=1 A和int之间的关系
a.l=[]
a.l.append
之所以用到组合 是希望能使用a对象去操作另外一个类对象中的方法

 

面向对象三大特性
继承:创建类的方式,在python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类
称为派生类或子类
多态:
封装:

 


继承
class parentclass1:pass 父类, 超类,基类
class parentclass2:pass
class childdclass(parentclass1):pass 子类 派生类
class childdc2ass(parentclass1,parentclass2):pass

 

print(ChildClass1.__base__) 会显示该类的一个父类
print(ChildClass2.__base__)
print(ChildClass2.__bases__) 会显示所有父类
print(parentclass1.__base__) object类 继承
object 在python3中所有的子类都继承自object 个人理解object是所有类的爸爸,爷爷类
所有类都默认继承object 里面有个__init__方法


继承与抽象
抽象:实例/对象抽象为类再把类与类之间相似的特此抽象出来,就形成了基类.
继承:父级

猫类:吃 喝 睡 爬树
狗类:吃 喝 睡 看家

写两个类来描述猫和狗

 

首先创建一个person对象
初始化:找init方法,自己调用自己的.
class father_dog_people:
def__init__(self,name,sex,hp,aggr,skill)
class father_dog_people:
def__init__(self,*args)
self.name=name


Animal.__init__(self) 等于self.__init__

 


派生属性:父类没有的在子类派生出来了
父类和子类有同名时候,子类只会使用子类的方法,不会使用父类的,如果子类想要使用父类的
那么需要子类强制调用父类的名字.
需要语法:父类名字.方法名(self,其他参数)
派生方法:

练习

class Foo: #创建一个类
def __init__(self): #创建一个inin()
self.func()
def func(self): #创建一个func()
print("in foo")
class Son(Foo): #创建一个类
def func(self):
print("in son")
son() #调用son()
f=Foo()
#一个对象调用方法时.先找子类的,后找父类的.

 

super()关键字:单继承中 super会寻找父类的方法 且在使用spuer
调用父类方法的时候不需要再传self参数.
py3中才有的关键字
例子:
super(Person,self).__init__(name,aggr,hp)

#再看看单继承

 


#object -->A--> B--> C--> D

class A:
def wahaha(self):print("in A")
class B(A):
def wahaha(self):print("in B")
class C(B):
def wahaha(self):print("in C")
class D(C):
def wahaha(self):print("in D")
d=D()
d.wahaha()


多继承

 


A B C
\ | /
D

class A:
def wahaha(self):print("in A")
class B:
def wahaha(self):print("in B")
class C:
def wahaha(self):print("in C")
class D(A,B,C):
def wahaha(self):print("in D")
d=D()
d.wahaha()
多继承为按照传参顺序来继承.

钻石继承()面试容易考到

A
/ \
B C
\ D /

 


B C 继承A
D继承B C
class A:
def wahaha(self):print("in A")
class B(A):
def wahaha(self):print("in B")
class C(A):
def wahaha(self):print("in C")
class D(B,C):
def wahaha(self):print("in D")

d=D()
d.wahaha()

顺序为:
B 到D
C到 D
A到 C
A到 B
横着为广度
竖着为深度
py3中符合广度优先算法

 

 


乌龟问题
A
B C

D E
F
class A:
def wahaha(self):print("in A")
class B(A):
def wahaha(self):print("in B")
class C(A):
def wahaha(self):print("in C")
class D(B):
def wahaha(self):print("in D")
class E(C):
def wahaha(self):print("in E")
class F(D,E):
def wahaha(self):print("in F")
f=F()
f,wangwang()
先找F
找D
找B
找E
找C
找A

 

广度优先原则
子类能和父类联系
先走一条路走完了 然后再走另外一条 这样可以少走很多重复的路
f=F()
f.wahaha()
print(F.mro())#新式类中广度优先
python3中所有的类,都继承object
如果一个类继承了object,这个类就被称为新式类
如果这个类没有继承object类,就被称为经典类.

经典类中
会深度优先,一条路走到黑然后再走另外一条路

 

 

遍历算法:深度优先,广度优先
把这个图中的所有的项全走一遍.且不会重复走
经典类 ,深度优先当中没有mro这和方法 py2中才会有
新式类遵循 广度优先算法 有mro方法 py3中py2中都会存在
py3中使用super方法找到单继承的父类
在单继承中 super就是找父类
再多继承中 super找的轨迹是根据mro顺序的.广度优先顺序

 


下午:
复习今天上午学的内容
默写人狗大战继承问题
面向对象作业 校园管理系统 下周一交
1.题目周所有的类都抽象出来
2.每一个类都有哪些属性和方法
3.思考这个管理系统的使用方式
这些类之间有什么关系
4.写完类和类中的属性
5方法名例出来就可以了
四点半到五点来将作业
六点半到七点半

 

"""
查找基类
class father1:
    pass
class father2:
    pass
class child1(father1):pass
class child2(father1,father2):pass
print(child2.__base__,child2.__base__)
print(child2.__bases__)
     
猫类:吃 喝 睡 爬树
狗类:吃 喝 睡 看家

写两个类来描述猫和狗

class dog:
    def __init__(self,name,kind,food)
        self.name=name
        self.kind=kind
        self.food=food
    def eat
        print("%s在吃%"%(self.name,self.food))
    def drink
    def sleep
    def watch
    
    
class cat:
    def __init__(self,name,kind,food)
        self.name=name
        self.kind=kind
        self.food=food
    def eat
    def drink
    def sleep
    def clmb

tom=cat()子类使用名字(方法和静态变量),如果在子类没有的话,就去父类去查找
hei=eat()

继承
class pet:
    def __init__(self,name,kind,food)
        self.name=name
        self.kind=kind
        self.food=food
    def eat
        print("%s在吃%"%(self.name,self.food))
    def drink
    def sleep


cat这个类
创建一个空对象
执行__iit__方法,子类没有用父类的

人狗大战相似的地方,就可以用继承来节省代码.更加可读 创建人狗大战父类

class father_dog_people:
    def__init__(self,name,sex,hp,aggr,skill)
    def name():
        self.name=name
        self.sex=sex
        self.hp=hp
        self.aggr=aggr
        self.skill=skill
    def sex():
        
    def hp():
        
    def skill():

首先创建一个person对象
初始化:找init方法,自己调用自己的.
class father_dog_people:
    def__init__(self,name,sex,hp,aggr,skill)
class father_dog_people:
    def__init__(self,*args)
        self.name=name


Animal.__init__(self)  等于self.__init__




class Dog(Ainmal):
    def bite(self,person):
alex=person("")

class foo1:
    def __init__(self,name)
class foo2:
    def __init__(self,name)

派生属性



class A:pass
a=A()

练习

class Foo:                     #创建一个类
    def __init__(self):        #创建一个inin()                                  
        self.func()
    def func(self):            #创建一个func()
        print("in foo")
class Son(Foo):                #创建一个类
    def func(self):
        print("in son")
son()                           #调用son()
f=Foo()
#一个对象调用方法时.先找子类的,后找父类的.


class Animal:
    def __init__(self,name,aggr,hp):
        self.name=name
        self.aggr=aggr
        self.hp=hp
    def eat(self):
        print("in Animal eat")

class Person(Animal):
    def __init__(self,name,sex,aggr,hp):
        self.sex=sex  #派生属性
        #Anmal__init__(self,name,aggr,hp)
        super().__init__(name,aggr,hp)
        #单继承中super会寻找父类
        #且在使用super时调用父类方法时不需要再传入self参数
    def eat(self):
        print("in Person eat")
alex=Person("alex","不详",1,250)
print(alex.__dict__)


#固定模板
#调用父级的两种方式
#直接调用
#super调用
"""
#再看看单继承
#object  -->A-->  B-->  C-->  D

class A:
    def wahaha(self):print("in A")
class B(A):
    def wahaha(self):print("in B")
class C(B):
    def wahaha(self):print("in C")
class D(C):
    def wahaha(self):print("in D")
d=D()
d.wahaha()


多继承
A B C
\ | /
  D

class A:
    def wahaha(self):print("in A")
class B:
    def wahaha(self):print("in B")
class C:
    def wahaha(self):print("in C")
class D(A,B,C):
    def wahaha(self):print("in D")
d=D()
d.wahaha()
多继承为按照传参顺序来继承.

钻石继承()面试容易考到

     A
   /   \
B         C
   \  D  /
B C 继承A
D继承B C
class A:
    def wahaha(self):print("in A")
class B(A):
    def wahaha(self):print("in B")
class C(A):
    def wahaha(self):print("in C")
class D(B,C):
    def wahaha(self):print("in D")

d=D()
d.wahaha()

顺序为:
B 到D
C到 D
A到 C
A到 B
横着为广度
竖着为深度
py3中符合广度优先算法




乌龟问题
     A
B         C

D         E
     F
class A:
    def wahaha(self):print("in A")
class B(A):
    def wahaha(self):print("in B")
class C(A):
    def wahaha(self):print("in C")
class D(B):
    def wahaha(self):print("in D")
class E(C):
    def wahaha(self):print("in E")
class F(D,E):
    def wahaha(self):print("in F")
f=F()
f,wangwang()
先找F
找D
找B
找E
找C
找A

广度优先原则
子类能和父类联系
先走一条路走完了 然后再走另外一条 这样可以少走很多重复的路
f=F()
f.wahaha()
print(F.mro())#新式类中广度优先
python3中所有的类,都继承object
如果一个类继承了object,这个类就被称为新式类
如果这个类没有继承object类,就被称为经典类.

经典类中
会深度优先,一条路走到黑然后再走另外一条路

遍历算法:深度优先,广度优先
把这个图中的所有的项全走一遍.且不会重复走
经典类 ,深度优先当中没有mro这和方法   py2中才会有
新式类遵循 广度优先算法 有mro方法      py3中py2中都会存在
py3中使用super方法找到单继承的父类
在单继承中 super就是找父类
再多继承中   super找的轨迹是根据mro顺序的.广度优先顺序




下午:
复习今天上午学的内容
默写人狗大战继承问题
面向对象作业 校园管理系统 下周一交
1.题目周所有的类都抽象出来
2.每一个类都有哪些属性和方法
3.思考这个管理系统的使用方式
这些类之间有什么关系
4.写完类和类中的属性
5方法名例出来就可以了
四点半到五点来将作业
六点半到七点半
计算器
员工信息表
附加:个人思考一个自制的学习程序.
#开发原则
#不要发生循环继承的关系,就像是不要短路一样
#依赖倒置原则:高层模块不能依赖低层模块,二者都应该依赖其抽象;
#抽象不应该依赖具体细节底层模块不能依赖
"""
查找基类
class father1:
    pass
class father2:
    pass
class child1(father1):pass
class child2(father1,father2):pass
print(child2.__base__,child2.__base__)
print(child2.__bases__)
     
猫类:吃 喝 睡 爬树
狗类:吃 喝 睡 看家

写两个类来描述猫和狗

class dog:
    def __init__(self,name,kind,food)
        self.name=name
        self.kind=kind
        self.food=food
    def eat
        print("%s在吃%"%(self.name,self.food))
    def drink
    def sleep
    def watch
    
    
class cat:
    def __init__(self,name,kind,food)
        self.name=name
        self.kind=kind
        self.food=food
    def eat
    def drink
    def sleep
    def clmb

tom=cat()子类使用名字(方法和静态变量),如果在子类没有的话,就去父类去查找
hei=eat()

继承
class pet:
    def __init__(self,name,kind,food)
        self.name=name
        self.kind=kind
        self.food=food
    def eat
        print("%s在吃%"%(self.name,self.food))
    def drink
    def sleep


cat这个类
创建一个空对象
执行__iit__方法,子类没有用父类的

人狗大战相似的地方,就可以用继承来节省代码.更加可读 创建人狗大战父类

class father_dog_people:
    def__init__(self,name,sex,hp,aggr,skill)
    def name():
        self.name=name
        self.sex=sex
        self.hp=hp
        self.aggr=aggr
        self.skill=skill
    def sex():
        
    def hp():
        
    def skill():

首先创建一个person对象
初始化:找init方法,自己调用自己的.
class father_dog_people:
    def__init__(self,name,sex,hp,aggr,skill)
class father_dog_people:
    def__init__(self,*args)
        self.name=name


Animal.__init__(self)  等于self.__init__




class Dog(Ainmal):
    def bite(self,person):
alex=person("")

class foo1:
    def __init__(self,name)
class foo2:
    def __init__(self,name)

派生属性



class A:pass
a=A()

练习

class Foo:                     #创建一个类
    def __init__(self):        #创建一个inin()                                  
        self.func()
    def func(self):            #创建一个func()
        print("in foo")
class Son(Foo):                #创建一个类
    def func(self):
        print("in son")
son()                           #调用son()
f=Foo()
#一个对象调用方法时.先找子类的,后找父类的.


class Animal:
    def __init__(self,name,aggr,hp):
        self.name=name
        self.aggr=aggr
        self.hp=hp
    def eat(self):
        print("in Animal eat")

class Person(Animal):
    def __init__(self,name,sex,aggr,hp):
        self.sex=sex  #派生属性
        #Anmal__init__(self,name,aggr,hp)
        super().__init__(name,aggr,hp)
        #单继承中super会寻找父类
        #且在使用super时调用父类方法时不需要再传入self参数
    def eat(self):
        print("in Person eat")
alex=Person("alex","不详",1,250)
print(alex.__dict__)


#固定模板
#调用父级的两种方式
#直接调用
#super调用
"""
#再看看单继承
#object  -->A-->  B-->  C-->  D

class A:
    def wahaha(self):print("in A")
class B(A):
    def wahaha(self):print("in B")
class C(B):
    def wahaha(self):print("in C")
class D(C):
    def wahaha(self):print("in D")
d=D()
d.wahaha()


多继承
A B C
\ | /
  D

class A:
    def wahaha(self):print("in A")
class B:
    def wahaha(self):print("in B")
class C:
    def wahaha(self):print("in C")
class D(A,B,C):
    def wahaha(self):print("in D")
d=D()
d.wahaha()
多继承为按照传参顺序来继承.

钻石继承()面试容易考到

     A
   /   \
B         C
   \  D  /
B C 继承A
D继承B C
class A:
    def wahaha(self):print("in A")
class B(A):
    def wahaha(self):print("in B")
class C(A):
    def wahaha(self):print("in C")
class D(B,C):
    def wahaha(self):print("in D")

d=D()
d.wahaha()

顺序为:
B 到D
C到 D
A到 C
A到 B
横着为广度
竖着为深度
py3中符合广度优先算法




乌龟问题
     A
B         C

D         E
     F
class A:
    def wahaha(self):print("in A")
class B(A):
    def wahaha(self):print("in B")
class C(A):
    def wahaha(self):print("in C")
class D(B):
    def wahaha(self):print("in D")
class E(C):
    def wahaha(self):print("in E")
class F(D,E):
    def wahaha(self):print("in F")
f=F()
f,wangwang()
先找F
找D
找B
找E
找C
找A

广度优先原则
子类能和父类联系
先走一条路走完了 然后再走另外一条 这样可以少走很多重复的路
f=F()
f.wahaha()
print(F.mro())#新式类中广度优先
python3中所有的类,都继承object
如果一个类继承了object,这个类就被称为新式类
如果这个类没有继承object类,就被称为经典类.

经典类中
会深度优先,一条路走到黑然后再走另外一条路

遍历算法:深度优先,广度优先
把这个图中的所有的项全走一遍.且不会重复走
经典类 ,深度优先当中没有mro这和方法   py2中才会有
新式类遵循 广度优先算法 有mro方法      py3中py2中都会存在
py3中使用super方法找到单继承的父类
在单继承中 super就是找父类
再多继承中   super找的轨迹是根据mro顺序的.广度优先顺序




下午:
复习今天上午学的内容
默写人狗大战继承问题
面向对象作业 校园管理系统 下周一交
1.题目周所有的类都抽象出来
2.每一个类都有哪些属性和方法
3.思考这个管理系统的使用方式
这些类之间有什么关系
4.写完类和类中的属性
5方法名例出来就可以了
四点半到五点来将作业
六点半到七点半
计算器
员工信息表
附加:个人思考一个自制的学习程序.
#开发原则
#不要发生循环继承的关系,就像是不要短路一样
#依赖倒置原则:高层模块不能依赖低层模块,二者都应该依赖其抽象;
#抽象不应该依赖具体细节底层模块不能依赖
课上练习代码

 

posted on 2018-03-07 15:18  仓鼠大人爱吃肉  阅读(180)  评论(0编辑  收藏  举报