面向对象编程 Object-Oriented Programming
什么是对象:
对象是指现实中的物体或实体
什么是面向对象:
把一切看成对象(实例), 用各种对象之间的关系来描述事务
对象的特征
1. 对象有很多属性(名词或形容词)
年龄,姓名,性别 ...
2. 对象有很多行为(动作,动词)
学习,吃饭,睡觉,踢球,工作...
什么是类:
拥有相同属性和行为的对象分为一组,即为一个类
类是用来描述对象的工具,用类可以创建此类的对象(实例)
类和对象示意
车(类) ----->> BYD E6(京A.88888) 实例,对象
\
\---->> BWM X5(京B.00000) 实例,对象
狗(类) -----> 哈士奇(户籍号: 00001)
\
\-----> 导盲犬(户籍号:00002) 对象
int(类) -----> 100 (对象)
\
\ -----> 200 (对象)
类的创建语句 class 语句
语法:
class 类名(继承列表):
'''类文档字符串'''
实例方法定义
类变量定义
类方法定义(@classmethod)
静态方法定义(@staticmethod)
作用:
创建一个类
类用于描述对象的行为和属性
类用于创建此类的一个或多个对象(实例)
说明:
类名必须为标识符(与变量名命名规则相同,建议首字母大写)
类名实质上就是变量,它绑定一个类
示例:
class Dog:
'''创建一个Dog类,此类用于描述一种
小动物的行为和属性'''
pass
dog1 = Dog() # 创建Dog类的一个实例
print(id(dog1))
dog2 = Dog() # 创建Dog类的第二个实例
print(id(dog2))
print('--------------------')
# 对比
lst1 = list() # 创建一个空列表
print(id(lst1))
lst2 = list() # 创建另一个空列表
print(id(lst2))
构造函数
构造函数调用表达式:
类名([创建传参列表])
作用:
创建这个类的实例对象,并返回此实例对象的引用关系
说明:
实例有自己的作用域和名字空间,可以为该实例添加实例变量(也叫属性)
实例诃以调用类方法和实例方法
实例可以访问类变量和实例变量
实例方法(method)
语法:
class 类名(继承列表):
def 实例方法名(self, 形参名1, 形参名2, ....):
'方法文档字符串'
语句块
作用:
用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
说明:
实例方法的实质是函数,是定义在类内的函数
实例方法至少有一个形参,第一个形参用来绑定调用这个方法的实例,一般命名为'self'
实例方法的调用语法:
实例.实例方法名(调用传参)
# 或
类名.实例方法名(实例, 调用传参)
示例:
# 此示例示意实例方法的定义和调用
class Dog:
'''创建一个Dog类,此类用于描述一种
小动物的行为和属性'''
def eat(self, food):
'''此方法用来描述小狗吃东西的行为'''
print("id为:", id(self), '的小狗正在吃', food)
def sleep(self, hour):
print("小狗睡了", hour, '小时')
def play(self, obj):
print("小狗正玩", obj)
dog1 = Dog() # 创建一个小狗对象
dog1.eat('骨头')
dog1.sleep(1)
dog1.play('球')
dog2 = Dog() # 创建另外一只狗对象
dog2.eat('狗粮')
dog2.sleep(3)
dog2.play('飞盘')
实例属性 atrribute(也叫实例变量)
每个实例可以有自己的变量用来保存对象自己的数据, 称为实例变量(也叫属性)
语法:
实例.属性名
赋值规则同变量的赋值规则
首次为属性赋值则创建此属性
再次为属性赋值则改变属性的绑定关系
作用:
记录每个对象自身的数据
示例:
# 此示例示意为对象添加实例变量(实例属性)及访问实例变量(实例属性)
class Dog:
def eat(self, food):
print(self.color, '的', self.kinds,
'正在吃', food)
self.last_food = food
def show_last_food(self):
print(self.color, '的', self.kinds,
'上次吃的是', self.last_food)
dog1 = Dog()
dog1.kinds = '京巴' # 添加实例属性
dog1.color = '白色' # 添加
dog1.color = '黄色' # 修改实例属性的绑定关系
dog2 = Dog() # 另一个对象
dog2.kinds = '藏獒'
dog2.color = '棕色'
print(dog1.color, '的', dog1.kinds)
print(dog2.color, '的', dog2.kinds)
dog1.eat('骨头')
# dog1.last_food = '骨头'
dog2.eat('窝头')
# dog1.last_food = '窝头'
dog1.show_last_food()
dog2.show_last_food()
del语句
可以删除对象(实例)的属性
语法:
del 对象.实例变量名
示例:
class Dog:
pass
dog1 = Dog()
dog1.color = '白色'
print(dog1.color) # 白色
del dog1.color # 删除属性
print(dog1.color) # AttributeError属性错误
del 语句小结:
1) 删除变量 del name
2) 删除列表的元素 del L[1], del L[::2]
3) 删除字典的键 del d['name']
4) 删除对象的属性 del dog1.color
初始化方法
作用:
对新创建的对象添加属性
语法格式:
class 类名(继承列表):
def __init__(self, [形参列表]):
语句块
注: [] 代表其中的内容可省略
说明:
1. 初始化方法名必须为 '__init__' 不可改变
2. 初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self 传入 __init__ 方法
3. 构造函数的实参将通过 __init__方法的参数列表传入到__init__方法中
4. 实始化方法内如果需要return 语句返回,则只能返回None
示例:
# 此示例示意初始化方法的定义,及用初始化方法对新建对象添加属性
class Car:
'''小汽车类'''
def __init__(self, c, b, m):
self.color = c # 颜色
self.brand = b # 品牌
self.model = m # 形号
# print("初始化方法被调用")
def run(self, speed):
print(self.color, '的', self.brand, self.model,
'正在以', speed, '公里/小时的速度行驶')
a4 = Car('红色', '奥迪', 'A4')
a4.run(199)
t1 = Car("蓝色", "TESLA", 'Model S')
t1.run(230)
析构方法:
class 类名(继承列表):
def __del__(self):
语句块
析构方法在对象被销毁时被自动调用
python语言建议不要在对象销毁时做任何事情,因为销毁时间难以确定
示例:
# 此示例示意析构方法的使用
class Car:
def __init__(self, info):
self.info = info
print("汽车对象", info, '被创建')
def __del__(self):
print("汽车对象", self.info, '被销毁')
c1 = Car("BYD E6")
# c1 = None # 改变变量的绑定关系可以释放 BYD E6对象
del c1 # 删除变量,释放对象
L = []
L.append(Car("汽车1"))
L.append(Car("汽车2"))
L.append(Car("汽车3"))
del L # 释放列表
input("请输入回车键继续执行程序: ")
print("程序退出")
预置实例属性
__dict__属性
__dict__属性绑定一个存储此实例自身变量字典
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__dict__) # {}
dog1.color = "白色"
print(dog1.__dict__) # {'color': '白色'}
dog1.kinds = '京巴'
print(dog1.__dict__) # {'color': '白色', 'kinds':'京巴'}
__class__属性
'__class__' 属性绑定创建此实例的类
作用:
可以借助此属性来访问创建此实例的类
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__class__)
dog2 = dog1.__class__()
print(dog2.__class__)
用于类的函数:
isinstance(obj, class_or_tuple) 返回这个对象obj是否是某个类的对象或者某些类中的一个类的对象,如果是则返回True, 否则返回 False
type(obj) 返回对象的类型
今天没有作业~吼吼吼~~~
想要看更多的课程请微信关注SkrEric的编程课堂