Python高级笔记(七)魔法属性
1. 私有属性 名字重整
print(Test.__dict__)
{'__weakref__': <attribute '__weakref__' of 'Test' objects>, '__init__': <function Test.__init__ at 0x00000000010C59D8>, '__doc__': None, '__dict__': <attribute '__dict__' of 'Test' objects>, '__module__': '__main__'}
2. 魔法属性
2.1 __doc__
- 表示类的描述信息
2.2 __module__和 __class__
__module__: 表示当前操作的对象在哪个模块
__class__: 表示当前操作的对象的类是什么
2.3 __init__
- 初始化方法,通过类创建对象时,自动触发执行
2.4 __del__
当对象在内存中被释放时,自动触发执行
注:此方法一般无需定义,因为Python是高级语言,程序员无需关系内存的分配和释放,因此工作都是交给Python解释器来执行,所以,__del__的调用是 由解释器在进行垃圾回收时自动触发执行的。
2.5 __call__
- 对象后面加括号,触发执行
注意:__init__方法的执行是由创建对象触发的,即:对象 = 类名();而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
# -*- encoding=utf-8 -*- class Foo(object):
def __init__(self):
pass def __call__(self, *args, **kwargs):
print("__call__") c = Foo()
c()
Foo()()
2.6 __dict__
- 类或对象中的所有属性
类的实例属性属于对象; 类中的类属性和方法等属于类
# -*- encoding=utf-8 -*- class Foo(object):
country = "douzi" def __init__(self, name, count):
self.name = name
self.count = count def func(self, *args, **kwargs):
print("func") # 获取类的属性,即:类属性,方法
print(Foo.__dict__) # 获取对象obj1的属性
obj1 = Foo("test", 134)
print(obj1.__dict__)
{'__dict__': <attribute '__dict__' of 'Foo' objects>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'Foo' objects>, '__doc__': None, 'func': <function Foo.func at 0x000000000A538378>, 'country': 'douzi', '__init__': <function Foo.__init__ at 0x00000000010E59D8>}
{'count': 134, 'name': 'test'}
2.7 __str__
- 如果一个类中定一个 __str__方法,那么在打印对象时,默认输出该方法的返回值
class Foo(object):
def __str__(self):
return "douzi" t = Foo()
print(t)
douzi
2,8 __getitem__、__setitem__、__delitem__
- 用于索引操作,如字典。以上分别表示获取、设置、删除数据
- 表示实现了该三个方法,该类即当列表用
class Foo(object): def __getitem__(self, item):
print("__getitem__:", item) def __setitem__(self, key, value):
print("__setitem__:", key, value) def __delitem__(self, key):
print("__delitem__:", key) obj = Foo() res = obj["k1"] # 自动触发执行 __getitem__
obj["k2"] = "douzi" # 自动触发执行 __setitem__
del obj["k1"] # 自动触发执行 __delitem__
2.9 __getslice__、__setslice__、__delslice__
- 该三个方法用于分片操作,如:列表
class Foo(object): def __getslice__(self, i, j):
print("__getslice__:", i, j) def __setslice__(self, i, j, sequence):
print("__setslice__:", i, j, sequence) def __delslice__(self, i, j):
print("__delslice__:", i, j) obj = Foo() obj[0:2]
obj[0:2] = [11, 22, 33, 44]
del obj[0:2]
Python高级笔记(七)魔法属性的更多相关文章
- 『无为则无心』Python面向对象 — 60、魔法属性
目录 1.魔法属性__name__ 2.魔法属性__bases__ 3.魔法属性__mro__ 4.魔法属性__doc__ 5.魔法属性__module__ 和__class__ 6.魔法属性__di ...
- Python高级笔记(六)-- property属性【重要】
1. property属性 目的:简化逻辑流程 class Goods(object): @property def size(self): return 100 obj = Goods() ret ...
- Python学习笔记七
面向对象编程 面向对象的特性如下: 类:具有相同属性和方法的一类事物,成为类. 对象:类的实例化后的结果,一个类可以实例化多个对象,每个对象也可以不同的属性. 封装:在类中对数据的赋值,类里面包含着类 ...
- Python高级笔记(九)Python使用MySQL
1. MySQL基本使用 1.1 数据库简介 Mysql: 关系型数据库,做网站 redis:当作缓存 mongodb:非关系型数据库,做爬虫 SQL语句: DQL:数据查询语言,用于对数据进行查询, ...
- python学习笔记七 初识socket(进阶篇)
socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- Python学习笔记七-错误和异常
程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Pyt ...
- Python高级笔记(五)--实例方法、静态方法和类方法
1. 类属性.实例属性 类属性在内存中只保存一份 实例属性在每个对象中都要保持一份 obj.__class__.country="xxx": 可以修改类属性 2. 实例方法.静态方 ...
- python学习笔记(七)、异常
在实际开发中,往往不会出现一个系统编写下来,没有出现任何一个bug.为处理这种会出现错误的地方,如除数为零的除法,python提供了非常强大的机制————异常处理机制. 1 异常 python使用异常 ...
- python学习笔记(七) 类和pygame实现打飞机游戏
python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...
随机推荐
- .NET 中String 和StringBuilder 以及他们的区别
stirng对象是不可变的,每次使用String类的方法进行运算时(赋值.拼接),都会在内存中生成新的字符串对象,这就要为新对象分配新的内存空间. StringBuilder 实例的 int Capa ...
- Spring源码窥探之:xxxAware接口
Aware接口是一个标志性接口,继承此接口的接口xxxAware的实现类,在容器创建完成后,会回调实现方法,下面举例: 1. 有很多xxxAware接口,下面举两个例子 /** * descripti ...
- Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理
Oracle 中的 TO_DATE 和 TO_CHAR 函数 oracle 中 TO_DATE 函数的时间格式,以 :: 为例 格式 说明 显示值 备注 Year(年): yy two digits( ...
- c++的动态绑定和静态绑定及多态的实现原理(摘)
C++多态的实现原理 为了支持c++的多态性,才用了动态绑定和静态绑定.理解它们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误. 需要理解四个名词:对象的静态类型:对象在声明时采用的类型. ...
- 019_Python3 输入和输出
在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能.本章节我们将具体介绍 Python 的输入输出. ************************************ 1 ...
- Windows异常
一.什么是异常 异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误.输入错误)所导致的.简单来说异常就是对于非预期状况的处理,当我们在运行某个程序时出现了异常状况,就会进入异常处理 ...
- [SCOI2016]妖怪
嘟嘟嘟 离NOI最后一周,把自己容易忘的知识点和板子复习一下. (刚答完loj的笔试模拟,感觉上不了90--) update:哦,我89-- 先把式子写出来,每一个妖怪的战斗力\(S(i) = A + ...
- 洛谷 P1006 传纸条 题解
P1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法 ...
- 想学习找不到好的博客?看这里>>
想学习找不到好的博客?看这里>> (ps:内容 + 作者) 基础数论知识整理--gyh 进阶数论知识整理--又是gyh 关于SPFA--lyj(终于不是gyh) 证明二次探测定理-Line ...
- Mujin Programming Challenge 2017题解
传送门 \(A\) 似乎并不难啊然而还是没想出来-- 首先我们发现对于一个数\(k\),它能第一个走到当且仅当对于每一个\(i<k\)满足\(x_i\geq 2i-1\),这样我们就可以把所有的 ...