面向对象特性
- class 类
一个类是对一类拥有相同属性的对象的描述,在类中定义了这些对象都具备的属性/共同方法
- object对象
一个对象指一个类实例化后的实例,一个类必须经过实例化后才能在程序中调用,一个类可以实例化多个对象,每个对象也可以有不同的属性
- Encapsulation封装
在类中对数据的赋值/内部调用对外部用户是透明的,这使得类成为一个胶囊或者容器,里面包含着类的数据和方法
- Inheritance继承
一个类可以派生出子类,在这个父类里面定义的属性/方法自动被子类继承
- Polymorphism多态
多态是面向对象的重要特性,表现为:一个接口,多种实现,指一个基类(父类)中派生出了不同的子类,且每个子类在继承了同样的方法名的同时有队父类的方法做了不同的实现
变成其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来,再通过这个抽象的事物,与其他不同的具体事物进行对话
多态允许将子类的对象当做父类的对象使用,某父类型的引用只想其子类型的对象,调用的方法是该子类的方法。这里引用和调用方法的代码在编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定
类的定义
# /usr/bin/env python # -*- coding: utf-8 -*- # Author:Jenvid.yang class dog(object): nationality = 'CN' # 这是公有属性,在类里直接定义的属性 def __init__(self,name): # 构造函数、构造方法、个初始化方法 self.NAME = name # 这是属性、成员变量 self.__life_value=100 # 这是私有属性,只能在类的内部中访问,外部无法直接调用 def sayhi(self): # 类的方法,self是把实例本身传进来 这是方法、动态属性 print('hello, my name is ', self.NAME) def get_life_value(self): return self.__life_value #将私有属性通过函数返回方法暴露给外界,达到只能查看不能更改效果 d1=dog('wangcai') # 实例化类,类的实例,self也就相当于实例本身 # 1.相当于dog(d1,'wangcai') # 2.d1传给了init的self # 3.self.NAME等同于d1.NAME self.NAME=d1.NAME d1.sayhi() # 4.相当于d1.sayhi(d1),d1传给了sayhi的self # 5.之前d1.NAME已经赋值,此时相当于将赋值后的d1传给了sayhi的self,self里保存了NAME变量 # 6.最后的self.NAME相当于d1.NAME d1.nationality='US' #通过实例更改自己的属性,但是默认值预先存在于内存中,仅仅进行引用,重新赋值后在本地占用新一块内存存储 dog.nationality='US' #通过类名更改全局属性
d1._dog__life_value #强制访问私有属性 实例名._类名__私有属性名
def sayhi(self)
print('goodbye',self.name)
d1.sayhi=sayhi
d1.sayhi(d1) # 重写公有方法
理解:self 实例 私有属性 公有属性 引用 重写公有方法
class Role(object): def __init__(self,name,role,weapon,life_value=100,money=15000): self.name = name self.role = role self.weapon = weapon self.life_value = life_value self.money = money def shot(self): print('%s is shooting...'% self.name) def got_shot(self): print('i got shot...SOS') def buy_gun(self,gun_name): print("%s had buy gun %s" %(self.name,gun_name)) r1=Role('alex','policeman','b46') r2=Role('oldboy','terrise','B22') r1.shot() r2.got_shot() r2.buy_gun('b51') def buy_gun1(self): print("%s had buy gun xxx" %(self.name)) r2.buy_gun=buy_gun1 r2.buy_gun(r2) alex is shooting... i got shot...SOS oldboy had buy gun b51 oldboy had buy gun xxx