第18课 面向对象
面向对象
一、面向对象的设计和实现
1、定义和实现:对象可以直接对应现实世界的事物
2、面向对象的设计:OOD----Object Oriented Design
1)分析要解决的问题(现实世界的)
2)定义出各种对象----代表现实世界的对象
3)通过设计对象之间的关系和交互行为来设计系统
3、面向对象的设计与面向对象的语言
1)面向对象的设计:是一种设计思路
2)面向对象的语言:提供面向对象设计的语言支持
3)面向对象的语言能实现面向对象的设计思路
二、类和实例
1、对象的定义:类的实例化体现(如小王是人类中的具体某个人),包含属性(静态的,如身高、体重)和行为(动态的,如吃饭、睡觉)-----实际存在的个体
2、类的定义:具有共同属性和行为的事物的集合,如人类、鸟类、汽车类----抽象的
3、定义了类,就定义了对象类型(包括在系统里面的属性和行为)。类的属性和行为
三、静态属性和实例属性
1、静态属性(类属性)-----整个类所共有的属性
如:老虎这个名称(该类所有实例共享的属性)
2、实例属性----每个实例所特有的属性
1)举例:老虎的体重(每个老虎独有的属性)
2)定义在初始化方法__init__里
3)self的概念
四、知识点汇总
1、游戏分解:
1)老虎-----类
1--特征:
1--长相
2--体重 *
3-长度
2--行为:
1--进食(吃肉)*
2--叫 *
3--睡
4--跑
2)羊------类
1--特征:
1--长相
2--体重 *
3--长度
2--行为:
1--进食(吃草)*
2--叫 *
3--睡
4--跑
3)房间-------类
1--特征:
1--房间号
2--房间里的动物
2、随机操作
1)from random import randint
randint(0, 2)-----取值:0、1、2
3、计时操作:
1)import time
print(time.time()) 单位 s 从1970年开始算起
2)如果是打日志log,要换成北京时间。格式:xx-xxx-xxx
3)只是单纯的计时,不需要换算。
4、编程思路
1)定义一个类:
1--class 类名(首字母大写----规范)
2--class Tiger:
2)类的实例化:
t1 = Tiger()-------t1就是老虎类的一个实例
3)类里面的变量-----属性
4)类里面的函数-----方法
5)静态属性==类属性
1、这个属性属于整个类---所有实例化对象都是一样的
6)实例化属性:
1、这个属性---属于某一个实例----每一个实例都会不一样
2、def __init__(self):-----初始化方法==构造方法
3、只要创造了实例,都会去调用初始化方法
4、在创建实例的时候,就赋予了该实例的一些实例属性 def __init__(self, weight)
1-self-----t1、t2------实例对象本身
5、self:只是代言词,不是关键字------可以用其他字符代替。但是,不要去代替(规范)。
7) 方法:1-函数 2-行为
1、实例方法:每个具体实例相关的方法。
(1)初始化方法就是一个实例方法
(2)
2)静态方法:共有的方法,与每个具体实例无关-------类方法
1、@staticmethod 修饰---只能修饰紧跟的一个
8)对象的组合
9)继承
1、class SouTiger(Tiger): # 华南虎-----继承自父类Tiger
2、可以多继承
3、子类初始化方法里面,需要调用父类的初始化方法
class DoTiger(Tiger):
DoName = '东北虎'
def __init__(self, weight):
Tiger.__init__(self, weight)
10)方法的重写
1、super(SouTiger, s1).roar() # 调用父类的方法
super(子类名, 子类实例).父类的方法() # 调用父类的方法
class Tiger: # 老虎类 typeName = 'tiger' # 属性 def __init__(self, weight): self.weight = weight print('我是初始化方法') # 实例方法 def roal(self): print('wow!') self.weight -= 5 def feed(self, food): if food == '肉': self.weight += 10 print('喂食正确!') else: self.weight -= 10 print('喂食错误!') print( ) # 静态方法 ==== 类方法 @staticmethod def tell(): print('我是类方法') class Sheep: # 羊类 typeName = 'sheep' def feed(self, food): if food == '草': print('喂食正确!') else: print('喂食错误!') class Room: # 房间类 typeName = 'room' def __init__(self, num, animal): self.num = num self.animal = animal # 类的实例化 t1 = Tiger(100) # 创造实例t1 print(t1.weight) t1.roal() print('叫后的体重:', t1.weight) t1.feed('草') r1 = Room(1, Tiger(500)) print(r1.animal.weight) r1.animal.feed('草') from random import randint one = randint(0, 1) if one == 1: ani = Tiger(100) else: ani = Sheep() import time # 9-1 继承 class SouTiger(Tiger, Sheep): # 华南虎 多重继承:可以继承多个父类的方法。顺序,优先继承名字在前面的类 souName = '华南地区' def __init__(self, weight): Tiger.__init__(self, weight) def roar(self): print('我是子类的roar!') s1 = SouTiger(160) print(s1.typeName) print(s1.souName) s1.roar() super(SouTiger, s1).roar() # 调用父类的方法 t2 = Tiger(160) # 创造实例 t2 print(t2.weight) t3 = Tiger(180) # 创造实例 print(t1.typeName) print(t2.typeName) print(Tiger.typeName) t4 = Sheep() t4.feed('草')
p