周结
目录- 编程思想
- 面向对象之类与对象
- 静态方法
- 面向对象之继承
- 继承的本质
- 名字的查找顺序
- 经典类与新式类
- 派生方法
编程思想
面向过程编程:都需要列举每一步流程 并且随着步骤的深入 问题的解决越来越简单化
面向对象编程:类似一个造物主的感觉 只需要造出一个个对象 至于该对象将来会如何发展跟程序员没有关系 也无法控制
PS:两种思想没有优劣之分 需要结合实际需求而定 两种思想是彼此交融的 只不过占比不同
面向对象之类与对象
类与对象的创建
python中一定要有类才能借助于类产生对象
1.类的语法格式:
class 类名:
'''代码注释'''
对象公共的数据
对象公共的功能
class是定义类的关键字
类名的命名与变量名几乎是一致的 但首字母推荐是大写用于区分
数据:变量名与数据的绑定 功能(函数)其实就是函数
2.类的定义与调用
类在定义阶段就会执行类体代码 但是属于类局部名称空间 外界无法直接调用
'''在面向对象中 类和对象访问数据或者功能 统一采用句点符'''
'''类名加括号就会产生对象 并且每一次都会产生全新的的对象(我将类产生对象的过程叫做对象的实例化)'''
'''数据和功能也可以统称为属性 数据>>>属性名 功能>>>方法'''
对象独有的数据与功能
# 独有的数据
__init__:初始化方法__init__
当时实例化对象时会自动执行init方法 会自动将对象作为第一个参数传入 参数名称
'''
__init__ 执行流程:
1.类加括号产生一个对象
2.将类括号内的参数和空对象交给__init__执行空对象作为第一个参数
3.该方法会给独有的数据并自动返回对象本身
'''
# 独有的功能
定义在类中的功能 默认就是绑定给对象使用的 谁来调谁就是主人公
动静态方法
1.绑定给对象的方法
类中直接定义函数 默认绑定给对象 对象调用第一个参数就是对象本身
2.绑定给类的方法
被@classmethod修饰的函数默认绑定给类的 类的调用第一个参数就是类自身 对象也可以调用并且将产生该对象的类当做第一个数传入
3.静态方法 通过被@staticmethod修饰的函数 无论是函数还是对象本身 都必须自己手动传参
面向对象之继承的概念
面向对象的三大特征:
封装 继承 多态
三者中继承最为核心
在编程世界中类A继承类B就拥有了类B所有的数据和方法使用权
在定义类的时候后面加括号填写其他类名 编号继承其他类
在python中支持多继承 括号内填写多个类名彼此逗号隔开
继承了其他类的类称之为子类、派生类
被我们继承的类称之为父类、基类、超类
继承的本质
名字的查找顺序
[分不继承与单继承、多继承情况下的名字查找顺序
- 不继承
对象自身 >>> 产生对象的类 - 单继承
对象自身 >>> 产生对象的类 >>> 父类 - 多继承
对象自身 >>> 产生对象的类 >>> 父类(从左往右)
分:菱形继承、非菱形继承
菱形:广度优先(最后才会找闭环的定点)
非菱形:深度优先(从左往右每一条道走完为止)
PS:mro()方法点类名可以直接获取名字的查找顺序]()
经典类与新式类
经典类:不继承object或者其子类的类
新式类:继承object或者其子类的类
在python2中有经典类和新式类
在python3中只有新式类(所有类默认都继承object)
PS:在定义类的时候 如果没有其他明确的父类 也可能习惯写object来实现兼容
派生方法
子类基于父类某个方法做了扩展
class Peron:
school_name = '北京大学'
def __init__(self, name, age, hobby):
self.name = name
self.age = age
self.hobby = hobby
def func(self):
print(self.name)
class Student(Person):
def __init__(self, name, age, hobby, level):
super().__init__(self, name, age, hobby) # 子类调用父类的方法
self.level = level
stu1 = Student('jason', 18, 'read', 99)
标签:__,面向对象,对象,周结,self,继承,init
From: https://www.cnblogs.com/xiao-fu-zi/p/16863356.html