面向对象学习三字经:找名词、加属性、连关系
面向对象的特性:封装、继承、多态
<1>面向对象编程(Object-Oriented Programming )介绍
OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。
①Class 类
一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型。在类中定义了这些对象的都具备的属性(variables(data))、共同的方法
②Object 对象
一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同
③Encapsulation 封装
在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法
④Inheritance 继承
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承
⑤Polymorphism 多态
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。
封装
实例化例子:
object 新试类的写法 、__init__()叫做初始化方法(或构造方法)可以添加类的属性
self=实例对象r1
r1=Role("shikai","police","AK47") # 把一个类变成一个具体对象的过程叫实例化(初始化一个类,创建一个对象),把属性传给__init__()方法
#_*_coding:utf-8_*_ #__author__:"shikai" class Role(object): n=123 #类变量 l=[] def __init__(self,name,role,weapon,life_value=100,money=15000,age=10): #构造方法 传参数 self.name=name # 实列变量 (静态属性)作用域就是实列本身 self.role=role #r1.role=role r1相当于self self.weapon=weapon self.life_value=life_value self.__age=age ##私有属性 外部不可调用 在内部函数可以调用 self.money=money r1=Role("shikai","police","AK47") # 把一个类变成一个具体对象的过程叫实例化(初始化一个类,创建一个对象) Role.buy_gun(r1,'98k')
整个过程
继承:继承父类的方法和属性,继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”
①子类继承父类时,要先将父类属性添上 :name、age为父类属性、ideal为子类属性
def __init__(self,name,age,ideal): #在子类要添加新属性时要先添加父类的属性
② People.__init__(self,name,age) #(老式类)调用父类属性
super(Man,self).__init__(name,age) #(新式类) #另一个调用父类属性方法(解决多继承要写多个调用方法的困扰)
③子类实例化时要把父类属性加上
m1=Man("shikai",10,"python") #继承时候要把父类属性添上
#_*_coding:utf-8_*_ #__author__:"shikai" #class People(): #经典类 class People(object): #(新式类写法) ----------( 父类 ) def __init__(self,name,age): self.name=name self.age=age self.friends=[] def eat(self): print("{} eat good food!".format(self.name)) def talk(self): print("{} is talkking".format(self.name)) def sleep(self): print("{} is sleep".format(self.name)) class Relation(object): def make_friends(self,obj): print("{} is making friiends with {}!".format(self.name,obj.name)) self.friends.append(obj) class Man(People,Relation): #类的继承(子类) def __init__(self,name,age,ideal): #在子类要添加新属性时要先添加父类的属性 #People.__init__(self,name,age) #调用父类属性 super(Man,self).__init__(name,age) #(新式类) #另一个调用父类属性方法(解决多继承要写多个调用方法的困扰) self.ideal=ideal def eat(self): People.eat(self) #在父类方法上添加新方法 print("it is perfect!") def play(self): print("{} play lol,but never give up his {} ".format(self.name,self.ideal)) class Woman(People,Relation): def birth(self): print("{} will birth a little baby".format(self.name)) m1=Man("shikai",10,"python") #继承时候要把父类属性添上 # m1.eat() # # m1.play() w1=Woman("zhonghui",10) m1.make_friends(w1) #两个对象联系 print(m1.name) print(m1.friends[0].name)
多态:一个接口,多重调用。在继承父类之后可以添加新的方法和属性。
如:在子类中添加了ideal属性和eat、play方法
class Man(People,Relation): #类的继承(子类) def __init__(self,name,age,ideal): #在子类要添加新属性时要先添加父类的属性 #People.__init__(self,name,age) #调用父类属性 super(Man,self).__init__(name,age) #(新式类) #另一个调用父类属性方法(解决多继承要写多个调用方法的困扰) self.ideal=ideal def eat(self): People.eat(self) #在父类方法上添加新方法 print("it is perfect!") def play(self): print("{} play lol,but never give up his {} ".format(self.name,self.ideal))
子类联系:实例对象:m1=Man("shikai",10,"python")和实例对象: w1=Woman("zhonghui",10)通过继承父类Relation里的方法即可实现联系
#父类 class People(object): #(新式类写法) ----------( 父类 ) def __init__(self,name,age): self.name=name self.age=age self.friends=[] class Relation(object): def make_friends(self,obj): print("{} is making friiends with {}!".format(self.name,obj.name)) self.friends.append(obj) #子类1 class Man(People,Relation): #类的继承(子类) def __init__(self,name,age,ideal): #在子类要添加新属性时要先添加父类的属性 #People.__init__(self,name,age) #调用父类属性 super(Man,self).__init__(name,age) #(新式类) #另一个调用父类属性方法(解决多继承要写多个调用方法的困扰) self.ideal=ideal #子类2 class Woman(People,Relation): def birth(self): print("{} will birth a little baby".format(self.name)) #实例化 m1=Man("shikai",10,"python") w1=Woman("zhonghui",10) #联系 m1.make_friends(w1) #结果:shikai is making friiends with zhonghui!