面向对象编程 Ojbect-Oriented Programing
什么是对象:
对象是指现实中的物体过实体对象有什么特征:
对象有很多属性(名词,形容词)
姓名,年龄,性别
对象有很多行为(动作,动词)
学习,吃饭,睡觉,踢球,工作,借钱
面向对象
把一切都看成对象(实例) 用各种对象之间的关系来描述事务
类(class)
拥有相同属性和行为的对象分为一组,即为一个类
类是用来描述对象的工具,用类可以创建此类的对象(实例)
面向对象示意:
车(类) ------> BYD E5(京A.88888) 实例(对象)
\
\---> BMW X5 (京B.00000) 实例(对象)狗(类) ------> 小京巴(户籍号: 000001)
\
\----> 导盲犬(户籍号: 000002)int(类) ----> 100 (对象)
\
\---> 200 (对象,实例)
类的创建语句:
class 类名(继承列表):
'类的文档字符串'
实例方法的定义
类变量的定义
类方法的定义(@classmethod)
静态方法的定义(@staticmethod)
作用:
创建一个类
类用于描述对象的行为和属性
类用于创建此类的一个或多个对象(实例)
说明:
类名必须为标识符
类名实质上就是变量, 它绑定一个类
构造函数
构造函数的调用表达式
语法:
类名([创建传参列表])作用:
创建这个类的实例对象,并返回此实例的引用关系
实例对象说明:
- 实例有自己的作用域和名字空间,可以为该类的对象添加实例变量(也叫属性)
- 实例可以调用类方法和实例方法
- 实例可以访问类变量和实例变量
实例方法 method
语法:
class 类名(继承列表):
def 实例方法名(self, 参数1, 参数2, ...):
'文档字符串'
语句
作用:
用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
说明:
1. 实例方法实质是函数,是定义在类内的函数
2. 实例方法至少有一个形参有,第一个形参代表调用这个方法的实例,一般命名为 'self'
实例方法的调用语法:
实例.实例方法名(调用传参)
或
类名.实例方法名(实例,调用传参)
实例属性 attribute(也叫实例变量)
每个实例对象可以有自己的变量,称为实例变量(也叫属性)
语法:
实例.属性名赋值规则:
首次为属性赋值则创建此属性
再次为属性赋值则修改属性的绑定关系
作用:
记录每个对象自身的数据
删除属性 del 语句
del 对象.实例变量名
例如:
class Dog:
pass
dog1 = Dog()
dog1.color = "白色"
del dog1.color # 删除
del 语句
del 变量名 删除变量
del 列表[整数表达式] 删除列表中的元素
del 字典[键] 删除字典中的键
del 对象.属性 删除对象的属性
初始化方法:
作用:
对新创建的对象添加属性语法:
class 类名(继承列表):
def __init__(self [, 形参列表]):
语句块[ ] 代表中的内容可省略
说明:
1. 实始化方法名必须为 '__init__' 不可改变
2. 初始化方法会在构造函数创建实例后自动调用.且将实例自身通过第一个参数self 传入 __init__ 方法
3. 构造函数的实参将通过__init__方法的参数列表传入到 '__init__' 方法中
4. 初始化方法内如果需要return 语句返回,则只能返回None
示例:
# 写一个Student类 # 1) 为该类添加初始化方法, 实现在创建对象时自动设置 # '姓名','年龄', '成绩' 属性 # 2) 添加set_score方法能修改成绩信息 # 3) 添加show_info方法打印学生对象的信息 class Student: def __init__(self, name, age, score): self.name = name self.age = age self.score = score def set_score(self, s): self.score = s def show_info(self): print("{}今年{}岁,成绩是:{}分".format(self.name, self.age, self.score)) c1 = Student("小张", "25", "78") c1.show_info() # 小张今年25岁,成绩是:78分 c1.set_score(50) c1.show_info() # 小张今年25岁,成绩是:50分
析构方法:
语法:
class 类名:
def __del__(self):
...
说明:
析构方法在对象被销毁时被自动调用
python建议不要在对象销毁时做任何事情,因为销毁的时间难以确定
示例:
# 此示例示意析构方法的用法 class Car: def __init__(self, name): self.name = name print("汽车", name, '被创建') def __del__(self): '''析构方法,此方法会在对象销毁时自动被调用''' print('汽车', self.name, '被销毁') c1 = Car('BYD E6') c2 = c1 del c1 # 此时是删除c1变量,同时解除c1绑定的对象的引用
预置实例属性
__dict__ 属性
__dict__ 属性绑定一个存储此实例自身变量的字典示例:
class Dog: pass dog1 = Dog() print(dog1.__dict__) # {} dog1.kinds = '京巴' print(dog1.__dict__) # {'kinds': '京巴'}
__class__ 属性
此属性用于绑定创建些实例的类作用:
可以借助于此属性来访问创建此实例的类
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__class__)
dog2 = dog1.__class__()
print(dog2.__class__)
用于类的函数:
- isinstance(obj, 类或元组) 返回这个对象obj是否是某个类的对象或某些类中的一个类的对象,如果是则返回True,否则返回False
- type(obj) 返回对象的类型