- python: 函数式 + 面向对象
- 函数式可以做所有的事,是否合适?
面向对象:
一、定义:
函数: def + 函数名(参数)
面向对象: class -》 名字叫 Bar 类
def -> 名字叫 foo 的方法。第一个参数是 self
二、执行:
函数:函数名(参数)
面向对象: obj = Bar()# 创建中间人,对象
obj.foo()
# self:代指调用方法的对象(中间人)
中间人里面可以存值:obj.name = ‘lily’
self 永远指调用此方法的调用者
封装:将属性封装到对象里
# 构造方法:
特殊作用:
obj = 类名():完成两件事(1. 创建对象 2. 通过对象执行类中的一个特殊方法 __init__)
小结1: 创建类: class 类名
创建方法: 构造方法: __init__ 创建对象时自动调用此构建方法
普通方法:先创建对象,然后用对象调用普通方法
面向对象三大特性之一:封装
class Bar():
def __init__(self, name, age):
'''
构造方法,构造方法的特性,类名()自动执行构造方法
'''
self.name = name
self.age = age
print('123')
obj = Bar('lily', 18)
适用场景:如果多个函数中有一些相同参数时,转换成面向对象
面向对象三大特性之二:继承
重写:防止执行父类中的方法
主动调用父类方法有两种方式: super(son, self).football() 和 father.football(self)
推荐使用 super 方法
python中支持多继承: a. 左侧优先 b. 一条道走到黑 c. 同一个根时,根最后执行
面向对象三大特性之三:多态(python原生多态)
面向对象中高级:
成员:
字段:普通字段(保存在对象中)、 静态字段
普通字段属于对象,保存在对象中,只能通过对象访问;
静态字段属于类,内存中只保存一份,执行时可以通过对象访问,也可以通过类访问
方法:- 普通方法:保存在类中,由对象来调用 self ->调用对象
- 静态方法:@staticmethod; self 不是必须的;保存在类中,通过类直接调用
- 类方法: @classmethod ;保存在类中,由类直接调用; cls -> 当前类
##################### 应用场景:
如果对象中需要保存一些值,执行某功能时,需要使用对象中的值 -》 普通方法
不需要任何对象中的值 -》 用静态方法
属性:定义像方法,调用像字段