oop 面象对象
面向对象的特性:封装、继承、多态,利用 类、对象
class类: 对一类相同属性的对象抽象、蓝图、原型, 在类中定义这些对象都具备的属性
object对象: 类实例化后的实例
Encapsulation封装:对数据的赋值、内部调用对外部用户是透明的
作用:防止数据被随意修改,外部程序不需要关心对象内部构造,通过对外提供的接口直接访问即可
Inheritance继承:父类 ==> 子类 以最少代码的方式实现不同角色的共同点和不同点
Polymorphism
多态:对不同类的对象发出相同的消息将会有不同的行为(一种表现形式,多种形态)
1 class Animal(object): 2 def __init__(self,name): 3 self.name = name 4 5 def talk(self): 6 raise "Error is raise" 7 8 class Cat(Animal): 9 def talk(self): 10 return "Mcow!" 11 12 class Dog(Animal): 13 def talk(self): 14 return 'Woof! Woof!' 15 16 d = Dog("d1") 17 c = Cat("c1") 18 19 20 # Animal.talk(d) 21 # Animal.talk(c) 22 23 def animal_talk(obj): 24 print(obj.talk()) 25 26 animal_talk(d) 27 animal_talk(c)
新式类与经典类
1、语法区别:
class Person(object): super # 新式类
class Person: # 经典类
2、继承顺序的区别:(python2中能看到效果)
广度查询:从左往右,先查找同一级的继承函数(新式类)
深度查询:先把左边的继承都查完,左边都没有后在查右边的(经典类)
构造函数、析构函数、属性
def __init__(self): 构造函数、构造方法
def say(self): 类的方法
类 ----》 实例化 ----》 实例对象
__init__构造函数
self.name = name # 属性,成员变量
def sayhi() # 方法, 动态属性
class Role(object):
nationality = "CN" # 公有属性
def __init__(self,name):
self.name = name
self.__age = 18 # 私有属性
def __del__(self): # 析构函数,在函数执行完成后执行的函数
print("del run...")
r1 = Role("caoy")
Role.nationality = "US" # 更改类的公的属性
公有属性:在类里面定义的属性、类中的函数方法也是公有属性,实例对其进行引用
私有属性:对外不可访问print(r1.__age),对内可访问
只想外面可访问但不可改:
def get_age(self):
return self.__age
强制访问私有属性:
r1._Role__age
继承
继承: 继承的类称为“基类”、“父类”或“超类”
创建新类称为“子类”或“派生类”
一个类可以继承多个基类
通过“继承”和“组合”实现
实现方式: 实现继承(不需要额外代码)、接口继承(重新父类的方法)
多继承:
2.7 经典类:深度优先 新式类:广度优先
3.x 均是广度优先
1 class Person(object): 2 3 def __init__(self,name,age): 4 self.name = name 5 self.age = age 6 self.sex = "noraml" 7 8 def talk(self): 9 print('Person is talking....') 10 11 class WhitePerson(Person): 12 pass 13 14 15 class BlackPerson(Person): 16 def __init__(self,name,age,strength): 17 Person.__init__(self,name,age) 18 self.strength = strength 19 20 print(self.name, self.age, self.sex, self.strength) 21 22 def talk(self): 23 print("black person [%s] is blala..." % self.name) 24 25 def walk(self): 26 print("is walking ...") 27 28 b = BlackPerson("LiLei",30,"strong") 29 30 w = WhitePerson("HanMei", 18) 31 32 b.talk() 33 w.talk()