构造函数
析构函数
类的继承 多继承
1 class People(object): #People :表示类名,一般类名手写字母大写 ,object 为python3新式类标识, 新式类与旧式类的区别则是一个广度优先,一个深度优先,具体见后续 2 def __init__(self,name,age): #__init__这里是构造函数 self代表的是实例化的对象,后面在实例化时就通过self将对象传进来 ,name age 这里表示类的静态属性,实质就是变量 3 self.name = name #将定义的变量与实例化的对象联系起来 4 self.age = age 5 6 def talking(self): #类的方法 ,也叫类的动态属性 7 print('{} talking ......'.format(self.name)) 8 9 def __del__(self): #析构函数,用于在实例实例化完毕,即实例释放或者销毁的时候执行一些操作,例如关闭一些数据库连接 在后面的程序中如果不手动del掉实例m1 ,这个析构函数将在程序运行结束后才会执行 10 print("the end") 11 12 13 class Shejiao(object): 14 15 def makefriends(self,someone): 16 print('{} is make firends with {}'.format(self.name,someone.name)) #此处的someone.name是应为是实例在继承People类之后,因此也就有了可以直接调用的name属性 17 18 19 20 class Man(People,Shejiao): #定义一个新的类,继承People类 21 # pass #如果定一个新的类的子类,如果没有添加任何另外的属性,怎必须要添加一个pass 否则会报错 22 def Dog(self): 23 print("汪汪汪") 24 25 26 class Woman(People,Shejiao): #Woman类继承People类 与Shejiao类,继承顺序从左到右 27 def __init__(self,name,age,born): #重构类(新增born静态属性) 28 # People.__init__(self,name,age) #继承父类的法一 29 super(Woman,self).__init__(name,age) #super 函数调用父类法二 ,一般都使用此方法 ,新式类写法 30 31 self.born = born 32 33 def sweater(self): 34 print('{} sweater one boy.'.format(self.name)) 35 36 37 #m1 = People("long1","22") #实例化 38 #m1.talking() #调用实例化后对象m1的talking 方法 39 #del m1 #这里如果不手动del掉实例m1进行销毁 ,m1这个对象将一直存在到程序运行结束,其包含的析构函数也将在程序运行结束后才会被执行 40 41 man1 = Man("long2","23") 42 #man1.talking() 43 44 wo1 = Woman("hua","18","yes") 45 #wo1.sweater() 46 47 wo1.makefriends(man1)
面向对象编程(oop)
面向对象:
面向对象三大特性: 封装 继承 多肽
封装: 封装就是将具体的客观事物封装成抽象的类。并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可行的进行信息隐藏
继承: 面向对象编程语言的一个主要功能就是继承 继承是指这样的一种能力:他可以使用现有的类的所有的功能,并在无需重新编写原来的类的情况下对这些功能进行扩展,
通过继承创建的新类称为“子类”或者“派生类”。
被继承的类称为“基类”、“父类”或者“超类”
继承的过程就是从一般到特殊的过程
要实现继承,可以通过“继承”(Inheritance)和“组合”(composition)来实现
在某些oop语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承概念的实现方式主要有2类:实现继承,接口继承
1.实现继承是指使用基类的属性和方法而无需额外编码的能力;
2.接口继承是指仅使用属性和方法的名称,但是子类必须提供实现的能力(子类重构爹类方法)
在考虑使用继承时候,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,employee是一个人,manager也是一个人,因此这两个类都可以继承person类。但是Leg类却不能继承person类,应为腿并不是一个人。
抽象类仅定义将由子类创建的一般属性和方法
面向对象编程范式大致为:划分对象--> 抽象类 --> 将类组织成为层次化结构(继承和合成) --> 用类与实例进行设计和实现几个阶段
#经典类与新式类的区别
class A: #经典类格式
...
class A(object): #新式类格式
...
python2中经典类是按照深度优先来继承的
新式类是按照广度优先来继承的
python3中经典类和新式类都是统一按照广度优先来继承的
新式类与经典类区别如下图:
类关系:有ABCD4个类,D继承B,C B,C分别继承A
广度优先与深度优先并没有完全的谁对谁错,不同情况有各自的优点