*7、类的赋值、浅拷贝、深拷贝 

(一)封装

self.__age=age:  self.__age前面有两个"_",说明该属性不能在类对象外部被访问

(二)继承

子类中的初始化方法中有 super().__init__(name,age)  是调用父类的初始化方法给属性赋值,scorestudent  类中自己的属性,使用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】类和对象的再次深入相关推荐

  1. Python学习之变量、对象和引用

    Python学习之变量.对象和引用 文章目录 Python学习之变量.对象和引用 问题的引出 变量创建 变量类型 变量使用 动态类型 类型属于对象,而不是变量 对象的垃圾收集 参考资料 问题的引出 当 ...

  2. python学习笔记4(对象/引用;多范式; 上下文管理器)

    python学习笔记4(对象/引用:多范式; 上下文管理器) ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是 ...

  3. Python之面向对象类和对象

    Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object):"""类里定义一类事物共同的技能.可以是变量,也可是函数.& ...

  4. python入门笔记——类和对象⑤(继承)

    python入门笔记--类和对象⑤(继承) # python中展现面向对象的三大特征:封装.继承.多态 # 封装:把内容封装到某个地方以便后续的使用 # 对封装来说,其实就是使用初始化构造方法将内容封 ...

  5. 学到中年的python学习笔记06--面向对象基础编程

    面向对象编程基础 前言 一.类和对象 二.定义类 创建和使用对象 访问可见性 面向对象的三大特性 1.封装 2.继承 3.多态 练习1 定义一个类描述一下数字时钟 练习2 定义一个类描述平面上的点并提 ...

  6. 刻意练习:Python基础 -- Task10. 类与对象

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  7. 【Python教程】类及对象教程

    一.类创建 class Animal:def setName(self,name):self.name=namedef getName(self):return self.name#创建动物猫的对象 ...

  8. python中的类和对象

    一.类和对象 类和对象和概念 类:共性事物的抽象,是对某一类具有共同事物的描述,是具有相同属性和方法的集合 对象:类的实例,是共性事物的一个体现,是这类事物中的每个个体 总结: 类是对象的模板,对象是 ...

  9. python学习高级篇(part9)--对象的引用计数

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__str__()` 类对象的特殊方法之`__new__()` 对象的引用计数 什么是引用计数 对象的引用计数加1 ...

  10. python多个对象调用类方法、且之间有联系_趣味解读Python面向对象编程 (类和对象)...

    一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢? 面向 ...

最新文章

  1. Vue中使用js-cookie插件实现登录时记住密码后存取到Cookie中
  2. GraphPad Prism(医学绘图) v9.1.2.226 for Win
  3. go gorm 密码隐藏_掀开华为云的Go语言编程底座!有深度、有点难、需细品(上)...
  4. vim note(6)--vim的一个较全的介绍(转)
  5. TypeScript里数组foreach和map操作的区别
  6. android系统应用功能,Android系统应用(12)
  7. 微型计算机储存信息的基本单位是什么,16.磁盘存储器存、取信息的最基本单位是...
  8. ASP.NET Core 应用程序状态
  9. c 语言栈,C语言栈
  10. [原创]K8 cping 3.0大型内网渗透扫描工具
  11. LeetCode 1000. 合并石头的最低成本(区间DP)
  12. 一种可提高导师寿命的有效方案
  13. 用数据追女神:追女生如同创业
  14. python中json模块_python中的json模块
  15. [日期]字符串转Data对象
  16. 【申博攻略】三.北交计算机学院学术型博士“申请-考核”攻略(经验分享篇)
  17. python如何获取表单数据_Python Django 获取表单数据的三种方式
  18. idea快速查找一个类或类中方法名和变量
  19. 手机号归属地 mysql脚本_手机号码归属地能否取消? 这些热点问题,工信部回复了...
  20. ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3

热门文章

  1. 工业互联网WMS系统,前端基于Vue,后端基于NetCore,前后端分离,支持跨平台、支持多租户
  2. 网站搜索设计 读书笔记
  3. libtorch学习笔记(16)- Faste-RCNN的RPN如何训练以及训练的参数集
  4. 均分37.1,文凭通过率100%,汇佳学校IB成绩再再创新高
  5. 小红薯笔记/帖子采集工具
  6. iPhone用户干货:袋鼠下载,如何导出已下载的视频到其他播放器?
  7. 【GPS信号跟踪捕获】基于FPGA的GPS系统跟踪捕获算法的Verilog实现
  8. 数据仓库 — 05_日志生成(日志生成jar包的部署、脚本的编写_启动_时间同步_进程查看)
  9. 22-10-14 西安 spring循环依赖、对象内存布局、synchronized锁升级
  10. 《魔兽世界》AI数据表脚本函数[转]