(小甲鱼python)类和对象(III)总结 类的绑定,self,__dict__的妙用

news/2023/12/9 12:00:56

一、基础复习

1.类和对象(I)总结 类的定义、self的用法
2.类的继承、类的判断isinstance()、issubclass()、多重继承、类的组合

二、类的绑定

1.类的绑定(self的妙用)
例1:

>>> class Cat:def say(self):print("喵喵喵")>>> class Dog:def say(self):print("啊呦,,,,")>>> class Turtle:def say(self):print("不积跬步无以至千里。")>>> class Garden:t=Turtle()c=Cat()d=Dog()def say(self):self.t.say()self.c.say()self.d.say()>>> g=Garden()
>>> g.say()
不积跬步无以至千里。
喵喵喵
啊呦,,,,
>>> 

这里需要用到self.t.say(),而不是t.say(),t.say()会报错

>>> class Garden:t=Turtle()c=Cat()d=Dog()def say(self):t.say()         #会报错c.say()d.say()>>> g=Garden()
>>> g.say()
Traceback (most recent call last):File "<pyshell#34>", line 1, in <module>g.say()File "<pyshell#32>", line 6, in sayt.say()
NameError: name 't' is not defined

例2:
c中定义的元素d中没有定义,所以会报错。

>>> d=C()
>>> d.x=234
>>> c.x
>>> d=C()
>>> d.x=234
>>> c.x
Traceback (most recent call last):File "<pyshell#50>", line 1, in <module>c.x
AttributeError: 'C' object has no attribute 'x'

2.查看属性__dict__
dict左右有两个下划线
例3:

>>> c.__dict__
{'x': 520}
>>> d.__dict__
{'x': 234}
>>> d.y=660
>>> d.__dict__
{'x': 234, 'y': 660}

例4:

>>> class C:def set_x(self,v):self.x=v>>> c=C()
>>> c.__dict__
{}
>>> c.set_x(250)
>>> c.__dict__
{'x': 250}
>>> c.x
250

3.最简单类元素定义
例5:
定义一个空的类,然后对类进行属性的赋值。

>>> class C:pass>>> C.x=250
>>> C.y="小甲鱼"
>>> C.z=[1,2,3]
>>> print(C.x)
250
>>> 
>>> print(C.y)
小甲鱼
>>> 
>>> print(C.z)
[1, 2, 3]

例6:

>>> d={}
>>> d['x']=250
>>> d['y']="小甲鱼"
>>> d['z']=[1,2,3]
>>> print(d['x'])
250
>>> print(d['y'])
小甲鱼
>>> print(d['z'])
[1, 2, 3]
>>> 
>>> 
>>> class C:pass>>> c=C()
>>> c.x=250
>>> c.y="小甲鱼"
>>> c.z=[1,2,3]

课后题:
1.请问方法绑定的意义是什么?
答:共享!
解析:一辆共享单车,如何识别是谁在骑它?无非就是通过扫码绑定
一样的道理,为了节约内存,Python 没必要为每一个对象的方法都做一次拷贝,但如何区分是谁在调用?
通过 self 参数的绑定来识别嘛
2. 下面代码中,调用 c.hello() 和 C.hello© 的结果是一样的,请问它们是完全等价的吗?

>>> class C:
...     def hello(self):
...         print("Hello FishC.")
...
>>> c = C()
>>> c.hello()
Hello FishC.
>>> C.hello(c)
Hello FishC.

答:是的。
解析:
是的!方法相比函数来说,确实就是多了这么一个绑定的操作。因此,C.hello© 属于函数调用,而 c.hello() 则属于方法调用。
3.请问下面代码会打印什么呢?

>>> class C:
...     x = 100
...     def get_x(self):
...         print(x)
...
>>> c = C()
>>> c.x = 250
>>> c.get_x()
>>> # 请问这里会打印什么内容?

答:会报错(抛出异常 NameError: name ‘x’ is not defined)。
解析:在类的方法中直接访问 x 属性,并不会去对象或者类中找 x,根据 LEGB 原则,去找对应的变量。
理解了下面代码,大家应该就很清晰了:

>>> x = 123
>>> class C:
...     x = 100
...     def get_x(self):
...         print(f"x = {x}")
...         print(f"self.x = {self.x}")
...
>>> c = C()
>>> c.get_x()
x = 123
self.x = 100
>>> c.x = 250
>>> c.get_x()
x = 123
self.x = 250

4.请问下面代码会打印什么呢?

>>> class C:
...     x = 100
...     def get_x(self):
...         print(self.x)
...
>>> c = C()
>>> c.x = 250
>>> c.get_x()
>>> # 请问这里会打印什么内容?

答:250
解析:这里 c.x = 250,设置的是对象的 x 属性,当对象设置了属性之后,就不会再去访问其类的同名属性了。
5.请问下面代码会打印什么呢?

>>> class C:
...     x = 100
...     def get_x(self):
...         print(C.x)
...
>>> c = C()
>>> c.x = 250
>>> c.get_x()
>>> # 请问这里会打印什么内容?

答:100
解析:虽然 c.x = 250 设置的是对象的 x 属性,但是这里的细节是 print(C.x),所以打印的永远是类的 x 属性(而非对象的)。
6. 请问下面代码会打印什么呢?

>>> class C:
...     def f(self):
...         print("Hello FishC.")
...
>>> c = C()
>>> type(C.f) == type(c.f)
>>> # 请问这里会打印什么内容?

答:False。
解析:因为一个是函数(在类中定义,它还是一个函数),一个是方法(绑定了对象,那么它就是一个方法)。

>>> type(C.f)
<class 'function'>
>>> type(c.f)
<class 'method'>

7.请问下面代码会打印什么呢?

>>> class C:
...     x = []
...     def add_x(self, x):
...         self.x.append(x)
...
>>> c = C()
>>> d = C()
>>> c.add_x(250)
>>> d.add_x(520)
>>> c.x
>>> # 请问这里会打印什么内容?

答:[250, 520]
解析:
列表这类容器啊,就是这样的。它是单独存储的,然后所有它的引用都是指向相同的位置。


http://www.ppmy.cn/news/128362.html

相关文章

【sigslot】palacaze 基础例子

引入plog 打印到控制台 #include <sigslot/signal.hpp> #include <iostream> #include "H:\\net\\zeromq\\zeromq-4.3.4\\plog-1.1.9\\include\\plog\\Log.h" #include "H:\\net\\zeromq\\zeromq-4.3.4\\plog-1.1.9\\include\\plog\\Init.h"

冰蓝依赖 e-iceblue的spire.office依赖 下载报错

在maven的配置settings.xml文件中添加下列内容 <mirrors><mirror><id>com.e-iceblue</id><url>http://repo.e-iceblue.cn/repository/maven-public/</url><mirrorOf>com.e-iceblue</mirrorOf><name>com.e-iceblue</…

CPU E3-1230v2 开盖

为什么80%的码农都做不了架构师&#xff1f;>>> 某宝上买的E3-1230v2觉得温度有点高&#xff0c;开盖凉快一下。 工具&#xff1a;得力美工刀&#xff0c;热风焊台 过程&#xff1a;用热风枪300度吹金属盖&#xff0c;到烫手时用美工刀切&#xff0c;用热风枪吹的原…

萝莉遥控乐高电机

文章背景&#xff1a; 前段时间买了一辆积木拼搭的玩具车&#xff0c;春节几天把他组装好了&#xff0c;拥有遥控控制转向以及前进后退的功能。但自带的电池以及遥控感觉不太好用&#xff0c;特别是电池&#xff0c;充电两小时&#xff0c;跑起来五分钟。太不耐用了 自带遥控…

别克推出首款Ultium奥特能车型——ELECTRA E5

车控快讯&#xff08;文/每日一CHEK&#xff09;别克品牌推出首款Ultium奥特能车型——ELECTRA E5&#xff0c;是一款满足中国主流用户出行需求的越级大五座智电SUV&#xff0c;采用全新电动车设计语言&#xff0c;拥有越级品质空间和先进可靠的三电系统&#xff0c;同时搭载全…

达人评测 i3 13100和i3 13100f区别 i313100和i313100f对比

i3 13100采用10nm工艺 主频 3.4GHz 最高睿频 4.5GHz 四核心 八线程 三级缓存 12MB 热设计功耗(TDP) 60W支持最大内存 128GB 内存类型 DDR4 3200MHzDDR5 4800MHz集成显卡 Intel UHD Graphics 730 组装电脑选i3 13100还是i3 13100f怎么搭配更合适这些点很重要 http://www.adianna…

电动车质量最好的牌子是哪个?绿源INNO7给你答案

随着生活节奏加快&#xff0c;很多人会选择方便快捷的电动车代步。但是在选购电动车时&#xff0c;有些人却拿不定主意&#xff0c;不知道怎样才能不掉“坑”&#xff0c;选到质量在线的车子。 对此&#xff0c;小编推荐大家看看绿源液冷超续航系列的INNO7&#xff0c;质量杠杠…

中高端投影仪推荐,当贝F3 Air成4000元最值得买的投影仪

投影仪逐渐成为客厅必需品&#xff0c;每家装修时都要从电视机和投影仪中选一个作为后续的大屏娱乐设备&#xff0c;今天来聊聊中高端投影仪怎么选&#xff0c;中高端投影仪有什么推荐&#xff0c;目前主流市场中&#xff0c;投影仪的品牌无外乎当贝、极米、坚果等几大厂商&…

恩智浦电磁组智能汽车竞赛视频

飞思卡尔智能车视频 大家好&#xff0c;这是我们在2017年参加的飞思卡尔智能汽车竞赛视频。 视频中的车采用B车模&#xff0c;最终版比赛的视频没了&#xff0c;最终版可以跑到2.6米每秒&#xff0c;因为有圆环检测&#xff0c;所以速度慢一点&#xff0c;这个视频是调试中后期…

E-Prime 3 安装

本篇为《EEG处理》系列博客的第一篇&#xff0c;该系列博客主要记录EEG信号处理的学习过程中的软件安装和学习过程&#xff0c;方便以后查阅。本篇为E-Prime 3 的安装过程。 E-Prime 3 安装 E-Prime 3简介E-Prime 3安装 E-Prime 3简介 E-Prime是由卡内基梅隆大学(Carnegie Mel…

Oracle Database 23c新特性之关联更新和删除

Oracle database 23c 开始支持在 UPDATE 和 DELETE 语句中使用 JOIN 连接&#xff0c;获取更新和删除的数据源。 示例表 本文使用示例表可以通过 GitHub 下载&#xff0c;然后基于 employee 表创建一个 emp_devp&#xff1a; CREATE TABLE emp_devp AS SELECT * FROM empl…

诺华制药:一家被低估的瑞士制药巨头

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 关于诺华制药 诺华制药&#xff08;NVS&#xff09;是一家全球性的医疗健康公司&#xff0c;主要专注于处方药和仿制药的研究。诺华制药还开发、生产和销售有广泛的药物产品&#xff0c;如呼吸和心血管疾病、免疫学、神经科…

飞思卡尔电机驱动

这是一个电机驱动的原理图 在读懂这张图之前&#xff0c;我们先了解H桥式驱动电路导通原理 假设电机正转的时候&#xff0c;Q9与Q12会导通&#xff0c;Q10与Q11截至 反转的时候&#xff0c;Q10与Q11导通&#xff0c;Q9与Q12截至。 然后回到原理图里&#xff0c;为了让电机…

超高性能、7*24持续运行SECS GEM,SEMI E4,E5, E30,E37,E39,E40

1 .符合SEMI E4,E5,E37 的 SECS 通讯规范 2. 提供每秒100-1000次 Transaction 的通讯能力&#xff0c;高性能多线程并发处理Transaction 3. 提供 DLL 元件供程式设计者使用 4. 快速 Encode 与 Decode Big Message 5. 提供 Log 档案可查询历史通讯记录 6 .支援VC、C#等程式语言&…

艾利特EC63机器人坐标系与轴操作

一、关节坐标系 艾利特EC63机器人沿各轴轴线进行单独动作&#xff0c;所使⽤的坐标系成为关节坐标系。关节坐标系在机器人调试完成后就设定完成&#xff0c;不可更改。二、直⻆坐标系 艾利特EC63机器人直⻆坐标系也叫大地坐标系。每种机器人类型对应的直⻆坐标系⽅…

ELF

目录 一&#xff0c;目标文件格式 二&#xff0c;ELF 1&#xff0c;分段 2&#xff0c;工具 3&#xff0c;查看目标文件内容 一&#xff0c;目标文件格式 编译链接 https://blog.csdn.net/nameofcsdn/article/details/116654835 目标文件和可执行文件的逻辑结构是类似的…

433M无线串口E30-TTL-100在农业物联网上的应用

一、无线串口模块在农业物联网上的应用背景 智能农业&#xff0c;是通信、计算机和农学等若干学科和领域共同发展&#xff0c;并相互结合所形成的产物&#xff0c;它将信息采集、传输、处理和控制集成在一起&#xff0c;使人们更容易获得农作物生长各个阶段的各类信息&#xf…

L3-025 那就别担心了

下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题&#xff0c;其实都不用担心。 博主将这种逻辑推演称为“逻辑自洽”&#xff0c;即从某个命题出发的所有推理路径都会将结论引导到同一个最终命题&#xff08;开玩笑的&#xff0c;千万别以为这是真正的逻…

最早walkman android,入手一年,聊聊索尼 ZX505、艾利和SR15 两款安卓播放器使用体验...

大家好&#xff0c;我是太空橘子。 自从上初中的时候&#xff0c;收到了姐姐送我的第一台音乐播放器——Walkman NW-A815&#xff0c;就爱上了音乐&#xff0c;就像「痛苦的信仰」乐队的《不要停止我的音乐》歌名一样那般热爱。从此之后&#xff0c;便也陆陆续续购买了多款Walk…

关于飞思卡尔电磁组K60

从去年开始学习K60已经很长时间了&#xff0c;也看了很多的技术报告&#xff0c;原以为那些算法在自己的程序中也实用&#xff0c;结果到了现在 还在为电感数据不稳定而烦恼。。。 这个问题已经弄了一个星期了。 接下来不能在这样了。虽然 经历了这么多困难&#xff0c;但觉…
最新文章