面向对象

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': '男'}
09-14 04:30