python复习02

学习目标:

提示:面向对象内容复习


学习内容:

提示:这里可以添加要学的内容
例如:
1.面向对象
2.类
3.对象
4.组合
5.封装

学习产出:

提示:这里统计学习计划的总量
例如:
1.面向对象
1.1 写代码时,什么时候用面向对象?
a.代码量大,功能多的时候。
b.面试时回答:处理比较复杂的校色之间的关系
c.我们代码清晰度更高了
无论是开发者还是调用者都能明确的分辨出每个角色拥有的方法和属性,增强了代码的可拓展性。
1.2 python中一切皆是对象
a.基础数据类型 都是对象
1.3 类型和自定义类的关系(类型和类是一个东西)
a. 自己写的类在python中都是一种新的数据类型,字典、元组…这些都是python中已经开发好的数据类型.
b. type(obj) obj是一个对象,那么它的type就是那的数据类型。
1.4 创建一个对象
a. 类名() 实例化
b. new()创造了一个对象的空间,一些简单的初始化。
1.5 创建一个类
a. class 类名 语法级别的python解释器读到这句话的时候
b. type是所有类的元类,object是所有类的父类
c. 类也是被创建出来的,type创建类
d. class A(metaclass=ABCMeta) ABCMeta创建了这个A类,那么ABCMeta就是A类的元类,如果不指定为metaclass,则默认是type
e. type(cls) = type 那么type就是这个类的元类
总结:type(obj)的结果就是这个对象所属的类,type(类)的结果就是创建这个类的元类,大多数情况下就是type,除非你指定了metaclass

2.类
2.1 类是什么时候被加载的,以及类名是什么时候生效的
2.2
a. 静态属性/静态字段/静态变量
b. 动态属性/方法

class Person(object):
	ROLE = 'CHINA'
	print(Person.ROLE) #报错
	print(ROLE)
	def func(self):
	pass
a = Person()
print(Person.func)
print(a.func)

在这里插入图片描述
3.对象
3.1 类创造对象的过程就是实例化的过程:构造new,初始化init
a. 可以通过指针找到类的空间中的内容
b. 对象本身内部也存储了一些只属于对象的属性

4.组合 什么有什么的关系
4.1 一个类的对象作为另外一个类对象的属性

5.继承 什么是什么的关系,节省代码
5.1单继承
a.如果子类的对象调用某个方法,子类有:调用子类的;子类没有:找父类的。
b. 子类有但是想调用父类的:super:不用自己选传self super(子类,self).方法名(除self之外的参数)
父类名:父类名.方法名(self,…)
注意:在任何类中调用的方法,需要自己分辨到底是谁的对象。

5.2 多继承
a. 新式类:默认继承object,广度优先!c9算法。
python3里面默认继承object,所以python3都是新式类;python2需要主动继承object才是新式类。 可以通过mro方法查看继承顺序。
b. 经典类:不继承object,默认都是经典类,深度优先!没有mro.
c. 两种类的区别:
新式类:super().func()遵循mro算法,在类的内部不用传子类名和self
经典类:super(子类名,self).func() 必须串子类名和self
输出结果:ACBD
6.抽象类与接口类
6.1 抽象类和接口类
a. 不能被实例化
b. 规范子类当中必须实现某个方法
c.有原生的实现抽象类的方法,但是没有怨声实现接口类的方法

6.2 抽象类:抽象类中的方法是乐意实现的,只能单继承
6.3 接口类:可以多继承,但是这个类中的所有方法都不应该实现(pass)

6.4 java
a. java只支持类的单继承 抽象类 父类的方法可以实现
b. 接口 interface 支持多继承的规范 接口中的所有方法,只能写pass

7.多态和鸭子类型
7.1 处处是多态(多态:多个子类去继承父类,那么每一个子类都是这个父类的一种形态)

7.2 鸭子类型

8.封装
8.1 广义的封装:把方法和属性都封装在一个类里,定义一个规范来描述一类事物
8.2 狭义的封装:私有化 只能在类的内部访问
8.3__静态变量:私有方法,私有的对象属性,私有的类方法,私有的静态方法
8.4在内存中存储_类名__名字
8.5 为什么在类的内部可以使用双下划线访问:在类的内部使用,你就知道你在那个类中
8.6 在子类中不可以访问父类的私有变量
8.7 私有: 不能在类的外部使用也不能被继承

9.装饰器
property:装饰器函数,内置函数,帮助你将类中方法伪装成属性,特性
9.1 调用方法时不需要主动加括号
9.2 让程序的逻辑性更合理
9.3 @方法名.setter 装饰器,修改被porperty装饰的属性的时候会调用被这个装饰器装饰的方法,除了self之外还有一个参数,被修改的值。
9.4 @方法名.deleter 当要删除被porperty装饰的属性的时候会调用这个装饰器的方法

10. 类方法和恶静态方法
10.1 classmethod 类方法的装饰器 内置函数
a. 使用类名调用,默认传类名作为第一个参数
b. 不用对象命名空间中的内容,而使用了类名中的变量(静态属性),或者类方法或静态方法。

10.2 staticmethod 静态方法的装饰器 内置函数
a. 如果一个类里面的方法 ,既不需要用到self中的资源,也不用cls中的资源,相当于一个普通函数,但是你由于某种原因,还要把这个方法梵高类中,这个时候,就将这个方法变成一个静态方法。

b. 某种原因:1.你完全想用面向对象编程,所有的函数都必须写到类里。2.某个功能确确实实时这个类的方法吗,但是确确实实没有用到和这个类有关系的资源

11.反射
从某个指定的命名空间中,用字符串数据类型的变量来获取变量的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值