OOP 类 与对象
引子
面向过程:核心是过程二字。
过程指得是问题解解决的步骤,即先干什么再干什么,基于面向过程设计,就好像是设计一条流水线,是一种机械的思维方式。
优点:复杂的问题流程化,进而简单
缺点:可扩展性差
应用:脚本程序,linux系统管理脚本,linux内核,httpd,git
面向对象:核心是对象二字。
对象就是特征与技能的结合体,如果把设计程序比喻成创造世界,那你就是这个世界的上帝,与面向过程对机械流水线模式形成鲜明对比,
面向对象更加注重的对先是时间的模拟。
优点:可扩展性强
缺点: 复杂度高,弄不好的话,就会出现过度设计...
类:
即类型,类别,对象是特征与技能的结合体,so,类就是一系列对象相似的特征与技能的结合体.......
程序中,一定先定义类,后调用类来产生对象。
定义类:class Name( ):
类的继承:

1 #!/usr/bin/env python 2 #-*-coding:utf-8-*- 3 # author='tony' 4 # filename='class_inherit' 5 6 # 继承的基本形式..... 经典类、新式类的基本区别... 7 ''' 8 继承是一种类与类之间的关系,是一种什么是什么的关系,功能之一就是解决类的代码重用的问题; 9 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类也可称为超类过基类,新建的类也可称为,子类 10 或派生类。 11 12 查看类的基类:subclass.__base__,有多个基类的话换用tuple 包起来... 13 继承: class1(parentclass): 括号里写基类..... 14 python3定义的类都默认继承object,so 里面都是新式类,Python2 里有经典类直说,换言之没有继承Object的类都是经典类... 15 Python2 手动继承object 就是新式类了... 16 17 ''' 18 19 20 class OldboyPeople(): # 定义一个基类..... 21 def __init__(self,name,age,sex): # 初始化函数,可供子类继承.... 22 self.name = name 23 self.age = age 24 self.sex = sex 25 26 print('this is OldboyPeople is parent_class .... ') 27 28 def eat(self): # 方法,子类可继承.... 29 print('this is {0} eating from {1}....'.format(self.name,'OldboyPeople')) 30 31 32 class OldboyStudent(OldboyPeople): # 定义子类并继承上面基..... 33 def __init__(self,name,age,sex,edu): # 子类的初始化函数,继承基类方法时扩展自己的... 34 OldboyPeople.__init__(self,name,sex) # 继不继承 ,都可以这样直接调用.... class_name.__init__(self,argv,kwargs) 35 self.edu = edu # 定制自己的初始化... 36 print('this OldboyStudent name is {0},edu is {1} from {2}'.format(self.name,self.edu,'OldboyStudent_class')) 37 38 39 def learn(self): # 子类自己的方法.... 40 print('this is {0} learning from {1}... '.format(self.name,'OldboyStudent_class')) 41 42 ## 指名道姓的方式 访问一个类的属性,跟继承没有关系... 43 44 class OldboyTeach(OldboyPeople): # 定义子类2并继承上面的基类..... 45 def __init__(self,name,age,sex,edu): # 子类的初始化函数,继承基类初始化函数时,扩展自己的.... 46 OldboyPeople.__init__(self,name,sex,edu) # 继不继承 ,都可以这样直接调用.... class_name.__init__(self,argv,kwargs) 47 self.edu = edu # 定制自己的初始化.... 48 print('this is {0} edu... from {1}'.format(self.name,'OldboyTeach_class')) 49 50 def teach(self): # 子类自己的方法.... 51 print('this is {0} teaching from {1}....'.format(self.name,'OldboyTeach')) 52 53 54 t =OldboyTeach('tony',18,'male','博士') # 先生成一个空的对象在去找初始化.... 优先找自己的,随后找基类的.... 55 t.eat() # 对象调用类的方法... 56 57 ''' 58 总结: 59 1 继承功能之一:解决类与类之间代码重复问题。 60 2 继承是类与类之间的关系,是一种,什么是什么的关系。 61 3 在子类派生出的新的子类,以自己为准。 62 4 在子类派生出新的方法内重用父类的功能的方式:知名道姓法 63 class_name._init__ 64 这种用类名直接调用:知名道姓法
类的组合:
1 #!/usr/bin/env python3 2 #-*-coding:utf-8-*- 3 # author='tony' 4 # filename='组合' 5 6 # 类继承的查找依赖于一个mro表... 7 # 每个类都有一个mro列表... 8 9 10 # 继承是什么是什么的关系,而组合,则不依赖于这种关系 .... 11 # 依赖继承用super() 12 13 class People(): 14 def __init__(self,name,age,sex): 15 self.name = name 16 self.age = age 17 self.sex = sex 18 def eat(self): 19 print(' this is {0} eating '.format(self.name)) 20 21 def drink(self): 22 print('this is {0} drinking '.format(self.name)) 23 24 25 class Teacher(): 26 def __init__(self,name,age,sex): 27 People.__init__(self,name,age,sex) # 子类重用父类的方法.... 指名道姓方式用... 28 #super().__init__(name,age,sex) # super 生成的是一个对象,是bound method 绑定方法自动传self... 29 # 这个super()对象 bound method 方式依赖继承... 30 self.crouse = [] # 一个类的属性来之另一个类或多个类的实例化对象,不依赖于继承... 31 def teach(self): 32 print('{0} is teaching {1}'.format(self.name,self.crouse)) 33 34 35 class Student(People): 36 def __init__(self,name,age,sex): 37 People.__init__(self,name,age,sex) 38 #super().__init__(name,age,sex) # super 生成的是一个对象,是bound method 绑定方法自动传self... 39 # 这个super()对象 bound method 方式依赖继承... 40 self.studen = [] 41 42 def learn(self): 43 print('student {0} is learning '.format(self.name)) 44 45 46 47 class Cruose(): 48 def __init__(self,cruose,price,lang): 49 self.cruose = cruose 50 self.price = price 51 self.lang = lang 52 def cruose_info(self): 53 return '{0} {1} {2}'.format(self.cruose,self.price,self.lang) 54 55 56 python = Cruose('python',30000,'3mons') 57 linux = Cruose('linux',2000,'2mons') 58 bigdata = Cruose('bigdata',1000,'1mons') 59 # python.cruose_inifo() 60 c = Cruose('python',10000,'3mous') 61 # c.cruose_info() 62 63 tony = Teacher('tong',29,'男',) 64 tony.crouse.append(python) 65 tony.crouse.append(linux) 66 tony.crouse.append(bigdata) 67 for obj in tony.crouse: 68 print(obj.cruose_info()) 69 70 # 将一个类的对象当做元素添加到类中去,作为类的属性....