4.Python 面向对象、模块
知识要点
4.1 面向对象编程
4.2 类和对象
4.3 对象的属性和方法
4.4 继承
4.5 多态
4.6 模块
4.1 面向对象编程
面向对象编程:简称OOP,把对象作为程序的基本单元
面向过程的程序:计算机程序视为一系列命令集合
面向对象的程序:计算机程序视为一组对象的集合
- Python 中所有数据类型都可视为对象
- 面向对象是抽象出 Class,根据 Class 创建 Instance
4.2 类和对象
对象:某一个具体事物的存在,可以直接使用
类:将具有共同特征和行为的一组对象抽象定义为类
对象和类的关系:
- 类就是创建对象的模板
- 一个类可以找到多个对象
定义类:class 类名():
class Hero(object): def info(self): print('hero') ''' object 是Python 里所有类的最顶级父类 类名 的命名规则按照“大驼峰命名法” info 是实例方法,第一个参数一般是 self,表示实例对象 根据已经定义的类取创建出一个或者多个对象 '''class Hero(object): def info(self): print(self) print('self 各不同,对象是出处。') # Hero 这个类,实例化了一个对象 hero = Hero() # 对象调用实例方法 info(),执行 info() 里的代码 # . 表示选择属性或者方法 hero.info() print(hero)
4.3 对象的属性和方法
添加和获取对象的属性
- 类外部添加对象属性:对象名.属性名 = 值
- 类外部获取对象属性:对象名.属性名
通过 self 获取对象属性
- 类内部添加对象属性:self.属性名 = 值
- 类内部获取对象属性:self.属性名
对象的属性和方法
- __init__() 方法,在创建一个对象时默认被调用,不需要手动调用。
- __init__(self) 中的 self 参数,不需要开发者传递,python 解释器会自动把当前的对象引用传递过去。
class Hero(object): def __init__(self): self.name = 'hero' self.hp = 2600 def move(self): print('正在赶往事发地点...') # 实例化一个英雄对象( 实例化对象的同时,自动调用__init__()方法 ) hero = Hero()init 魔法方法
- 一个类可以创建多个对象
- __init__(self) 中,默认 1 个参数名字 self,若创建对象时传递了 2 个实参,除了 self 作为第一个形参外还需要 2 个形参
- 若类中有多个对象,每个对象的属性时各自保存的,但实例方法时共享的,只占用一份内存空间;类会通过 self 来判断时哪个对象调用了实例方法
class Hero(object): """定义了一个英雄类,可以移动和攻击""" def __init__(self, name, hp): """ __init__() 方法,用来做变量初始化 或 赋值 操作;英雄名、生命值 """ self.name = name self.hp = hp def move(self): """实例方法""" print("%s 正在前往事发地点..." % self.name) def info(self): print("英雄 %s 的生命值 :%d" % (self.name, self.hp))
# 实例化英雄对象时,参数会传递到对象的__init__()方法里 blind = Hero("瞎哥",2600) gailun = Hero("盖伦",4200)
# 不同对象的属性值的单独保存 print(id(blind.name)) print(id(gailun.name))
# 同一个类的不同对象,实例方法共享 print(id(blind.move())) print(id(gailun.move()))
4.4 继承
继承:多个类之间的所属关系
若类A里的属性和方法可以复用,可以通过继承的 方式传递到类B里,类A就是基类,也叫父类;类B就是派生类,也叫子类。
class A(object): # 父类 def __init__(self): self.num = 10 def print_num(self): print(self.num + 10) class B(A): # 子类 pass
继承 含义 实例 单继承 含义:子类只继承一个父类
特点:
- 子类在继承时,在定义类时,小括号()中为父类的名字
- 父类的属性/方法,会被继承给子类
- 子类对象可以直接使用父类的属性和对象
# 定义一个Person类 class Person(object): def __init__(self): # 属性 self.name = "女娲" # 实例方法 def make_person(self): print(" <%s> 造了一个人..." % self.name) # 定义Teacher类,继承了 Person,则Teacher是子类,Person是父类。 class Teacher(Person): ''' 子类可以继承父类所有的属性和方法, 哪怕子类没有自己的属性和方法,也可以使用父类的属性和方法。 ''' pass panda = Teacher() # 创建子类实例对象 print(panda.name) # 子类对象可以直接使用父类的属性 panda.make_person() # 子类对象可以直接使用父类的方法多继承 含义:子类只继承多个父类
特点:
- 多继承可以继承多个父类,也继承了所有父类的属性和方法
- 多个父类中,不重名的属性和方法,不会有任何影响
(多个父类时,哪个类放在前面,会优先哪个类的属性和方法)
class Women(object): def __init__(self): self.name = "女娲" # 实例变量,属性 def make_person(self): # 实例方法,方法 print(" <%s> 造了一个人..." % self.name) def move(self): print("移动..") class Man(object): def __init__(self): self.name = "亚当" def make_person(self): print("<%s> 造了一个人..." % self.name) def run(self): print("跑..") class Person(Women, Man): # 多继承,继承了多个父类 pass ls = Person() print(ls.name) ls.make_person() ls.move() ls.run()
4.5 多态
多态:不同的子类对象调用相同的父类方法,产生不同的执行结果
优点:可以增加代码的外部调用灵活度
- 多态以 继承 和 重写 父类方法为前提
- 多态时调用方法的技巧,不会影响到类的内部设计
class Animal(object): def run(self): print('Animal is running...') class Dog(Animal): def run(self): print('Dog is running...') class Cat(Animal): def run(self): print('Cat is running...') # 定义一个方法 def run_twice(animal): animal.run() animal.run() dog = Dog() cat = Cat() run_twice(dog) run_twice(cat)
4.6 模块
模块:一个.py文件就是一个模块,模块就是管理功能代码的
内置模块:就是 python 自己内部自带的,不需要下载的模块,如以下常用模块:
# 小技巧:查看模块中的内容 import math dir(math)
模块 用处 os 执行系统命令 random 随机数 math 数学计算,提供了许多对浮点数的数学运算函数 time 时间,处理日期和时间

浙公网安备 33010602011771号