python 面向对象

构造函数

析构函数

类的继承  多继承

 

 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

 

广度优先与深度优先并没有完全的谁对谁错,不同情况有各自的优点

 

posted @ 2018-08-10 14:13  日出东海,我心向西  阅读(182)  评论(0)    收藏  举报