【python学习11】类和对象的再次深入
*7、类的赋值、浅拷贝、深拷贝
(一)封装
self.__age=age: self.__age前面有两个"_",说明该属性不能在类对象外部被访问
(二)继承
子类中的初始化方法中有 super().__init__(name,age) 是调用父类的初始化方法给属性赋值,score 是 student 类中自己的属性,使用self进行赋值
class Person:def __init__(self,name,age):self.name=nameself.age=agedef info(self):print(self.name,self.age)#定义子类
class Student(Person):def __init__(self,name,age,score):super().__init__(name,age) #调用父类的初始化方法给name,age赋值self.score=score #score是该类中自己的属性,故用self赋值
class Teacher(Person):def __init__(self,name,age,teacheryear):super().__init__(name,age) #调用父类的初始化方法给name,age赋值self.teacheryear=teacheryear #teacheryear是该类中自己的属性,故用self赋值stu=Student("张三",18,95)
teacher=Teacher("王梅",32,8)stu.info()
teacher.info()
python 中也可以实现 多继承
class A(object):passclass B(object):passclass C(A,B): #C类同时继承了A类,B类pass
(三)方法重写
方法重写:①可在子类中对方法重新编写
②子类中重写后的方法可用 super().xx() 调用父类中原始的方法 (和子类中的初始化方法一样用super().__init__(name,age)语句调用父类中的初始化方法)
③重写方法时会出现箭头显示overrides method in object
class Person: #父类def __init__(self,name,age):self.name=nameself.age=agedef info(self):print(self.name,self.age)#定义子类
class Student(Person):def __init__(self,name,age,score):super().__init__(name,age) #调用父类的初始化方法给name,age赋值self.score=score #score是该类中自己的属性,故用self赋值def info(self):super().info() #重写子类中的info方法,若还想用父类的方法要写super().info()print(self.score) #重写方法后添加的语句
class Teacher(Person):def __init__(self,name,age,teacheryear):super().__init__(name,age) #调用父类的初始化方法给name,age赋值self.teacheryear=teacheryear #teacheryear是该类中自己的属性,故用self赋值stu=Student("张三",18,95)
teacher=Teacher("王梅",32,8)stu.info()
teacher.info()
(四)object类
__str__()方法没搞懂
写完类之后,通常对 __str__()方法进行重写
class Student: #若未见说明则继承object类passstu=Student()
print(dir(stu)) #内置函数dir()查看指定对象所有属性
(五)多态的实现
class Animal(object):def eat(self):print("动物会吃")
class Dog(Animal):def eat(self):print("狗吃骨头")
class Cat(Animal):def eat(self):print("猫吃鱼")
class Person(object):def eat(self):print("人吃任何")def fun(obj):obj.eat()fun(Cat())
fun(Dog())
fun(Animal())
fun(Person()) #不用关心Person时谁的子类,只关心Person是否具有eat方法
不用关心上面代码中 Person 是谁的子类,只关心Person是否具有eat方法
JAVA是静态语言,Python是动态语言
(六)特殊属性和特殊方法
以两个下划线"__"开始和两个下划线"__"结束的属性或方法,是特殊的属性或方法
1,特殊属性
类对象的__dict__属性包括该类的所有属性和方法的字典,实例对象的__dict__属性包括该实例对象的所有属性的字典
print(x.__class__) #属性__class__,输出实例对象x所属的类
print(C.__bases__) #属性__bases__,输出C类所继承的多个父类并将父类放在元组中
print(C.__mro__) #属性__mro__,输出可查看类的层次结构,即子类父类和祖父类
print(A.__subclasses__) #属性__subclasses__,查看A类的子类并把子类放在列表中
2,特殊方法
若想让两个实例对象的某些属性相加,则需要在类中重写__add__()方法(理解表中对应内容)
若想统计实例对象某些属性的长度,则需要在类中重写__len__()方法(理解表中对应内容)
(1)__new__与__init__演示创建对象的过程
①方框中的9360,7104是输出的地址;箭头表示传参的过程
②由上图可知先用__new__创建对象,再用__init__初始化对象
③上图__new__方法中用了super().__new__(cls),使用父类object类中的创建对象的方法传参cls
(七)类的赋值、浅拷贝、深拷贝
浅拷贝:子对象是指 该源对象中包括的其他类的实例对象,源对象和拷贝对象引用同一个
子对象
深拷贝:会拷贝对象中包含的子对象,源对象和拷贝对象的所有子对象不相同
【python学习11】类和对象的再次深入相关推荐
- Python学习之变量、对象和引用
Python学习之变量.对象和引用 文章目录 Python学习之变量.对象和引用 问题的引出 变量创建 变量类型 变量使用 动态类型 类型属于对象,而不是变量 对象的垃圾收集 参考资料 问题的引出 当 ...
- python学习笔记4(对象/引用;多范式; 上下文管理器)
python学习笔记4(对象/引用:多范式; 上下文管理器) ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是 ...
- Python之面向对象类和对象
Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object):"""类里定义一类事物共同的技能.可以是变量,也可是函数.& ...
- python入门笔记——类和对象⑤(继承)
python入门笔记--类和对象⑤(继承) # python中展现面向对象的三大特征:封装.继承.多态 # 封装:把内容封装到某个地方以便后续的使用 # 对封装来说,其实就是使用初始化构造方法将内容封 ...
- 学到中年的python学习笔记06--面向对象基础编程
面向对象编程基础 前言 一.类和对象 二.定义类 创建和使用对象 访问可见性 面向对象的三大特性 1.封装 2.继承 3.多态 练习1 定义一个类描述一下数字时钟 练习2 定义一个类描述平面上的点并提 ...
- 刻意练习:Python基础 -- Task10. 类与对象
背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...
- 【Python教程】类及对象教程
一.类创建 class Animal:def setName(self,name):self.name=namedef getName(self):return self.name#创建动物猫的对象 ...
- python中的类和对象
一.类和对象 类和对象和概念 类:共性事物的抽象,是对某一类具有共同事物的描述,是具有相同属性和方法的集合 对象:类的实例,是共性事物的一个体现,是这类事物中的每个个体 总结: 类是对象的模板,对象是 ...
- python学习高级篇(part9)--对象的引用计数
学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__str__()` 类对象的特殊方法之`__new__()` 对象的引用计数 什么是引用计数 对象的引用计数加1 ...
- python多个对象调用类方法、且之间有联系_趣味解读Python面向对象编程 (类和对象)...
一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢? 面向 ...
最新文章
- Vue中使用js-cookie插件实现登录时记住密码后存取到Cookie中
- GraphPad Prism(医学绘图) v9.1.2.226 for Win
- go gorm 密码隐藏_掀开华为云的Go语言编程底座!有深度、有点难、需细品(上)...
- vim note(6)--vim的一个较全的介绍(转)
- TypeScript里数组foreach和map操作的区别
- android系统应用功能,Android系统应用(12)
- 微型计算机储存信息的基本单位是什么,16.磁盘存储器存、取信息的最基本单位是...
- ASP.NET Core 应用程序状态
- c 语言栈,C语言栈
- [原创]K8 cping 3.0大型内网渗透扫描工具
- LeetCode 1000. 合并石头的最低成本(区间DP)
- 一种可提高导师寿命的有效方案
- 用数据追女神:追女生如同创业
- python中json模块_python中的json模块
- [日期]字符串转Data对象
- 【申博攻略】三.北交计算机学院学术型博士“申请-考核”攻略(经验分享篇)
- python如何获取表单数据_Python Django 获取表单数据的三种方式
- idea快速查找一个类或类中方法名和变量
- 手机号归属地 mysql脚本_手机号码归属地能否取消? 这些热点问题,工信部回复了...
- ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
热门文章
- 工业互联网WMS系统,前端基于Vue,后端基于NetCore,前后端分离,支持跨平台、支持多租户
- 网站搜索设计 读书笔记
- libtorch学习笔记(16)- Faste-RCNN的RPN如何训练以及训练的参数集
- 均分37.1,文凭通过率100%,汇佳学校IB成绩再再创新高
- 小红薯笔记/帖子采集工具
- iPhone用户干货:袋鼠下载,如何导出已下载的视频到其他播放器?
- 【GPS信号跟踪捕获】基于FPGA的GPS系统跟踪捕获算法的Verilog实现
- 数据仓库 — 05_日志生成(日志生成jar包的部署、脚本的编写_启动_时间同步_进程查看)
- 22-10-14 西安 spring循环依赖、对象内存布局、synchronized锁升级
- 《魔兽世界》AI数据表脚本函数[转]