面向对象
1.1、oop介绍
- 面向过程:
在思考问题的时候,怎么按照步骤去实现,
然后将问题解决拆分成若干个步骤,并将这些步骤对应成方法一步一步的最终完成功能 - 面向过程:就是一开始学习的,按照解决问题步骤去编写代码【根据业务逻辑去写代码】
- 面向对象:关注的是设计思维【找洗车店, 给钱洗车】
- 从计算机角度看:面向过程不适合做大项目
- 面向过程关注的是:怎么做
- 面向对象关注的是:谁来做
1.2、类和对象
-
类:是一个模板,模板里包含多个函数,函数里实现一些功能
-
对象:则是根据模板创建的实例,通过实例对象可以执行类中的函数
-
类由3部分构成:
- 类的名称:类名
- 类的属性:一组数据
- 类的方法:允许对进行操作的方法(行为)
- 类是具有一组 相同或者相似特征【属性】和行为【方法】的一系列对象的集合
- 对象:是实实在在的一个东西,类的具象化 实例化
- 类是对象的抽象化 而对象是类的实例
"""
在程序中,必须要事先定义类,然后再调用类产生对象(调用类拿到的返回值就是对象)。产生对象的类与对象之间存在关联,这种关联指的是:对象可以访问到类中共有的数据与功能,所以类中的内容仍然是属于对象的,类只不过是一种节省空间、减少代码冗余的机制,面向对象编程最终的核心仍然是去使用对象。
"""
1.3、定义类
#创建对象
#对象名=类名()
'''
class 类名:
属性
方法
'''
#实例方法 :
# 在类的内部,使用def关键字可以定义一个实例方法,与一般函数 定义不同,类方法必须包含参数self【self可以是其他的名字,但是这个位置必须被占用】,且为第一个参数
#属性:在类的 内部定义的变量
#定义在类里面,方法外面的属性成为类属性,定义在方法里面使用self引用的属性称之为实例属性
class Person:
'''
对应人的特征
'''
name='小勇' #类属性
age=22 #类属性
'''
对应人的行为
'''
def __int__(self):
self.name = '小赵'#实例属性
def eat(self):#实例方法
print('狼吞虎咽的吃')
def run(self):#实例方法
print('飞快地的跑')
类体最常见的是变量的定义和函数的定义,但其实类体可以包含任意Python代码,类体的代码在类定义阶段就会执行,因而会产生新的名称空间用来存放类中定义的名字,可以打印Person.__dict__
来查看类这个容器内盛放的东西
print(Person.__dict__)
"""结果如下"""
{'__module__': '__main__', '__doc__': '\n 对应人的特征\n ', 'name': '小勇', 'age': 22, '__int__': <function Person.__int__ at 0x000001E768DCFEB0>, 'eat': <function Person.eat at 0x000001E76907A950>, 'run': <function Person.run at 0x000001E77A2FA9E0>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>}
调用类的过程称为将类实例化,拿到的返回值就是程序中的对象,或称为一个实例
#创建对象【类的实例化】
xm=Person() # 每实例化一次Person类就得到一个人的对象
xm.eat()#调用函数
xm.run()
print('{}的年龄是{}'.format(xm.name,xm.age))
1.4、__init__方法
# 如果有n个这样对象 被实例化,那么就需要添加很多次实例属性,显然比较麻烦
class Person1:
student='周杰伦'
def __init__(self,name,age,sex):#魔术方法
'''
实例属性的声明
'''
self.name=name
self.age=age
self.sex=sex
def run(self,name):
print('%s 跑太快了吧'%self.name)
然后实例出三个人
per1=Person1('zhao',18,'男')
per=Person1('lisi',22,'女')
per=Person1('wangwu',19,'男')
print(per1.age)#18
单拿per1的产生过程来分析,调用类会先产生一个空对象per1,然后将per1连同调用类时括号内的参数一起传给Person1.__init__(per1,’李zhao’,18,'男')
def __init__(self,name,age,sex):
self.name=name#per1.name='zhao'
self.age=age#per1.age=18
self.sex=sex#per1.sex='男'
会产生对象的名称空间,同样可以用__dict__
查看
print(per1.__dict__)
"""结果如下"""
{'name': 'zhao', 'age': 18, 'sex': '男'}