面向对象编程 Ojbect-Oriented Programming
两种编程思想:
面向过程编程
最小单位是: 函数 function
面向对象的编程:
最小单位是: 类 class
什么是对象:
对象是指现实中的物体或实体
什么是面向对象
把一切看成对象(实例) 用各种对象之间的关系来描述事物
对象都有什么特征:
对象有很多的属性(名词,形容词)
姓名, 年龄, 性别, 头发颜色
对象有很多行为(动作,动词)
学习,吃饭,睡觉,踢球,工作
什么是类
拥有相同属性和行为的对象分为一组,即为一个类
类是用来描述对象的工具,用类可以创建此类的对象(实例)
示意:
车(类) ----> BYD E6(京A.88888) 实例
\
\--> BMW X5(京B.00000) 对象(实例)
狗(类) ----> 小京巴(户籍号: 000001) 对象
\
\---> 导盲犬(户籍号:00002) 对象
int(类) -----> 100 对象
\
\---> 200 对象
类的创建语句:
语法:
class 类名(继承列表):
'''类的文档字符串'''
实例方法(类内的函数method)定义
类变量
类方法(@classmethod)
静态方法(@staticmethod)
作用:
创建一个类
类用于描述对象的行为和属性
类用于创建此类的一个或多个对象(实例)
说明:
类名必须是标识符
类名实质是变量,它绑定一个类
构造函数
格式:
类名([传参列表])
作用:
创建这个类的实例对象,并返回此实例对象的引用关系
说明:
对象(实例)可以调用类方法和实例方法
对象(实例) 有自己的作用域和名字空间,可以为该实例添加
实例变量(也叫实例属性)
实例方法(instance method)
定义格式:
class 类名(继承列表):
def 实例方法名(self, 参数1, 参数2, ...):
'''方法的文档字符串'''
语句块
作用:
用于描述一个对象的行为,让此类型的全部对象都拥有相同
的行为
说明:
实例方法的实质是函数,是定义在内类的函数
实例方法至少有一个形参,第一个形参绑定调用此方法的实
例,一般命名为'self'
实例方法的调用语法:
实例.实例方法名(调用传参)
或
类名.实例方法名(实例, 调用传参)
实例属性 attribute (也叫实例变量)
每个实例可以用自己的变量来记录每个对象自己的数据,这个
变量称为实例变量
使用语法:
实例.属性名
赋值规则:
首次为属性赋值则创建此属性
再次为属性赋值则改变此属性的绑定关系
作用:
记录每个对象自身的数据
删除属性:
del 语句
del 对象.实例变量名
del 语句总结:
1) 删除变量 del a,b,c
2) 删除列表中的元素 del L[0], L[0:3]
3) 删除字典中的键 del d['name']
4) 删除属性 del obj.name
初始化方法
作用:
对新创建的对象添加属性
语法格式:
class 类名(继承列表):
def __init__(self [,形参列表])
语句块
注:[]代表其中的内容可省略
说明:
1. 初始化方法的名必须是 '__init__' 不可改变
2. 初始化方法会在构造函数创建实例后自动调用,且将实
例自身通过第一个参数self传入'__init__' 方法
3. 构造函数的实参将通过__init__方法的参数列表传
入到__init__方法中
4. 初始化方法内如果需要return 返回,则必须返回None
析构方法
格式:
class 类名(继承列表):
def __del__(self):
....
作用:
在此对象销毁前释放此对象所占用的资源
说明:
析构方法在对象被销毁前被自动调用
python语言建议不要在对象销毁时做任何事情,因为销毁
的时间难以确定
预置实例属性
__dict__ 属性
__dict__属性绑定一个存储此实例自身变量的字典
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__dict__) # {}
dog1.color = "白色"
print(dog1.__dict__) # {'color': "白色"}
__class__ 属性
__class__ 属性绑定创建此实例的类
作用:
可以借助于此属性来访问创建此实例的类
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__class__)
dog2 = dog1.__class__() # Dog()
用于实例对象的函数:
isinstance(obj, class_or_tuple) 返回这个对象obj
是否是某个类的对象,或者某些类中一个类的对象.如果
是则返回True,否则返回False
type(obj) 返回对象的类型
示例:
class Dog:
pass
dog1 = Dog()
isinstance(dog1, Dog) # True
isinstance([1,2,3], Dog) # False
isinstance([1, 2, 3], (int, str)) # False
isinstance([1, 2, 3], (int, str, list))#True
type(dog1) is Dog # True