0
点赞
收藏
分享

微信扫一扫

Python学习笔记(4)

大南瓜鸭 2022-03-16 阅读 49
学习python

目录

二十七、类与对象

类的创建

类的组成

对象

类属性、类方法和静态方法的使用方式

动态绑定属性和方法

面向对象的三大特征

封装

继承

方法重写

多态

object类

特殊属性和特殊方法

特殊属性

特殊方法

类的赋值以及浅拷贝和深拷贝


二十七、类与对象

类的创建

clss Student:

pass

#类名由一个或者多个单词组成,每个单词的首字母大写,其余小写(规范)

类的组成

类属性

实例方法

静态方法

类方法

对象

对象的创建又称为类的实例化

语法:

实例名=类名()

类属性、类方法和静态方法的使用方式

动态绑定属性和方法

面向对象的三大特征

封装:提高程序的安全性

继承:提高代码的复用性

多态:提高程序的可扩展性和可维护性

封装

在Python中没有专门的修饰符用于属性的私有。如果该属性不希望在类对象外部被访问,前面使用两个“_"。

但是我们还是可以通过_类名__属性进行访问

继承

同时子类也可以有多个父类

方法重写

如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写

子类重写后的方法可以通过super().xxx()调用父类中的被去重写的方法

多态

即使不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法

动态语言和静态语言关于多态的区别

(如java)静态语言实现多态的三个必要条件

  1. 继承

  2. 方法重写

  3. 父类引用指向子类对象

而多态不一定要父类引用指向子类,只要有这个方法就能使用

object类

object类是所有类的父类,因此所有类都有object类的属性和方法

内置函数dir()可以查看指定对象所有属性

Object有一个_str_()方法,用于返回一个对于“对象的描述”,对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,所以我们经常会对_str_()进行重写

特殊属性和特殊方法

特殊属性

_dict_ 获得类对象或实例对象所绑定的所有属性和方法的字典

特殊方法

_len_() 通过重写_len_()方法,让内置函数len()的参数可以是自定义类型

_add_() 通过重写_add_()方法,可使用自定义对象具有“+”功能

_new_() 用于创建对象

_init_() 对创建的对象进行初始化

_len_()和_add_()

_new_()和_init_()

具体原理可以通过调试过程来查看

先是调用了new方法进行创建对象obj

创建完后返回obj对self进行赋值

执行完后初始化方法后又把self给了p1,所以我们会发现最后三个的id 都是一样的

类的赋值以及浅拷贝和深拷贝

类的赋值

只是形成两个变量,实际上还是指向同一个对象

浅拷贝

Python拷贝一般都是浅拷贝,拷贝只拷贝源对象,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象

会发现源对象的内存地址不一样,但是子对象cpu和disk的内存地址一样

深拷贝

使用copy模块的deepcopy函数,递归拷贝函数中包含的子对象,源对象和拷贝对象所有的子对象也不相同

会发现源对象和子对象的内存地址都不一样了

举报

相关推荐

0 条评论