三大编程范式
编程范式即编程的方法论,表示一种编程风格
python
是一门面向对象编程语言,但在python
中并没有人强制你使用哪一种固定的风格
三大编程范式:
- 面向过程编程
- 函数式编程
- 面向对象编程
面向对象设计和面向对象编程
**面向对象设计:**将一类具体事物的数据和动作整合到一起,即面向对象设计
例如:
def school(name,addr,type):
#初始化函数 定义学校的属性并且把方法整合在一起
def init(name,addr,type):
sch = {
'name': name,
'addr': addr,
'type': type,
'kao_shi': kao_shi,
'zhao_sheng': zhao_sheng
}
return sch
#定义学校的动作
def kao_shi(school):
print('%s 学校正在考试'%school['name'])
def zhao_sheng(school):
print('%s %s 正在招生'%(school['type'],school['name']))
return init(name,addr,type)
s1=school('a','北京','私立学校')
s2=school('b','武汉','私立学校')
s3=school('c','南京','公立学校')
s1['kao_shi'](s1) #a 学校正在考试
s2['zhao_sheng'](s2) #私立学校 b 正在招生
s3['kao_shi'](s3) #c 学校正在考试
面向对象编程:用定义类+实例/对象的方式去实现面向对象的设计
self:
- 由哪一个对象调用的方法,方法内的
self
就是 哪一个对象的引用 - 在类封装的方法内部,
self
就表示 当前调用方法的对象自己 - 调用方法时,程序员不需要传递
self
参数
在方法内部
- 可以通过
self.
访问对象的属性 - 也可以通过
self.
调用其他的对象方法
初始化方法
- 当使用
类名()
创建对象时,会 自动 执行以下操作:- 为对象在内存中 分配空间 —— 创建对象
- 为对象的属性 设置初始值 —— 初始化方法
(init)
- 这个 初始化方法 就是
__init__
方法,__init__
是对象的内置方法 __init__
方法是 专门 用来定义一个类 具有哪些属性的方法!
class School:
#初始化函数 定义学校的属性并且把学校的动作联系起来
def __init__(self,name,addr,type):
self.name=name
self.addr=addr
self.type=type
#定义学校的动作
def kao_shi(self):
print('%s 学校正在考试'%(self.name))
def zhao_sheng(self):
print('%s %s 正在招生'%(self.type,self.name))
s1=School('a','北京','私立学校')
s2=School('b','武汉','私立学校')
s3=School('c','南京','公立学校')
s1.kao_shi() #a 学校正在考试
s2.zhao_sheng() #私立学校 b 正在招生
s3.kao_shi() #c 学校正在考试
- 在 类的外部,通过
变量名.
访问对象的 属性和方法 - 在 类封装的方法中,通过
self.
访问对象的 属性和方法
__del__
方法
在 Python
中
- 当使用
类名()
创建对象时,为对象分配完空间后,自动 调用__init__
方法 - 当一个对象被从内存中销毁 前,会 自动 调用
__del__
方法
应用场景
__init__
改造初始化方法,可以让创建对象更加灵活__del__
如果希望在对象被销毁前,再做一些事情,可以考虑一下__del__
方法
生命周期
- 一个对象从调用
类名()
创建,生命周期开始 - 一个对象的
__del__
方法一旦被调用,生命周期结束 - 在对象的生命周期内,可以访问对象属性,或者让对象调用方法
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 去了" % self.name)
# tom 是一个全局变量
tom = Cat("Tom")
# 删除对象
del tom
运行结果
Tom 来了
#自动调用__del__
Tom 去了
__str__
方法
- 在
Python
中,使用print
输出 对象变量,默认情况下,会输出这个变量 引用的对象 是 由哪一个类创建的对象,以及在内存中的地址(十六进制表示) - 如果在开发中,希望使用
print
输出对象变量时,能够打印 自定义的内容,就可以利用__str__
这个内置方法了
注意:str 方法必须返回一个字符串
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 去了" % self.name)
tom = Cat("Tom")
print(tom)
运行结果
Tom 来了
<__main__.Cat object at 0x01C39970>
Tom 去了
class Cat:
def __init__(self, new_name):
self.name = new_name
print("%s 来了" % self.name)
def __del__(self):
print("%s 去了" % self.name)
def __str__(self):
return "我是小猫:%s" % self.name
tom = Cat("Tom")
print(tom)
运行结果
Tom 来了
我是小猫:Tom
Tom 去了
类和对象
- 类:把一类事物的相同特征和动作整合到一起就是类,类是一个抽象概念
- 对象:就是基于类而创建的一个具体的事物(具体存在的) 也是特征和动作整合到一起
在python
中声明函数与声明类很相似
定义类名时第一个字母最好是大写的
经典类与新式类:
- 只有在
python2
中才分经典类和新式类,python3
中统一都是新式类 - 新式类和经典类声明的最大不同在于,所有新式类必须继承至少一个父类
- 所有类不管是否显示声明父类,都有一个默认继承
object
父类
在python2中的区别:
#经典类
class Chinese:
pass
#新式类
class Chinese(object):
pass
为了保证编写的代码能够同时在 Python 2.x
和 Python 3.x
运行!今后在定义类时,如果没有父类,建议统一继承自 object
在python3中,上述两种定义方式全都是新式类