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高级笔记(七)魔法属性的更多相关文章

  1. 『无为则无心』Python面向对象 — 60、魔法属性

    目录 1.魔法属性__name__ 2.魔法属性__bases__ 3.魔法属性__mro__ 4.魔法属性__doc__ 5.魔法属性__module__ 和__class__ 6.魔法属性__di ...

  2. Python高级笔记(六)-- property属性【重要】

    1. property属性 目的:简化逻辑流程 class Goods(object): @property def size(self): return 100 obj = Goods() ret ...

  3. Python学习笔记七

    面向对象编程 面向对象的特性如下: 类:具有相同属性和方法的一类事物,成为类. 对象:类的实例化后的结果,一个类可以实例化多个对象,每个对象也可以不同的属性. 封装:在类中对数据的赋值,类里面包含着类 ...

  4. Python高级笔记(九)Python使用MySQL

    1. MySQL基本使用 1.1 数据库简介 Mysql: 关系型数据库,做网站 redis:当作缓存 mongodb:非关系型数据库,做爬虫 SQL语句: DQL:数据查询语言,用于对数据进行查询, ...

  5. python学习笔记七 初识socket(进阶篇)

    socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  6. Python学习笔记七-错误和异常

    程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Pyt ...

  7. Python高级笔记(五)--实例方法、静态方法和类方法

    1. 类属性.实例属性 类属性在内存中只保存一份 实例属性在每个对象中都要保持一份 obj.__class__.country="xxx": 可以修改类属性 2. 实例方法.静态方 ...

  8. python学习笔记(七)、异常

    在实际开发中,往往不会出现一个系统编写下来,没有出现任何一个bug.为处理这种会出现错误的地方,如除数为零的除法,python提供了非常强大的机制————异常处理机制. 1 异常 python使用异常 ...

  9. python学习笔记(七) 类和pygame实现打飞机游戏

    python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...

随机推荐

  1. Centos6 克隆后简单的网络配置

    第一步:修改主机名 $ vi /etc/sysconfig/network     第二步: $ vi  /etc/udev/rules.d/70-persistent-net.rules   注: ...

  2. Mycat简单配置

    最近项目中需要用到Mycat来作为Mysql的分表中间件.所以稍微研究了一下. Mycat使用起来是非常方便,而且最重要的是配置简单,稍显麻烦的就是需要对库中的每一个表都进行配置. 记录一下最重要的几 ...

  3. RCNN,Fast RCNN,Faster RCNN 的前生今世:(2) R- CNN (3,2,1)

    3.三次IOU  2.2次model run  1,一次深度神经网络 rcnn主要作用就是用于物体检测,就是首先通过selective search 选择2000个候选区域,这些区域中有我们需要的所对 ...

  4. python_requests ~爬虫~小视频~~~

    当一只小小的Py_Spider也有一段时间了, 期间,更多的时间是在爬取图片啊, 文字, 文档这类的东西, 今天突然一时兴起, 来爬一手视频! 所以就找到了远近闻名的六间房(六扇门)哈哈,~~~ 1. ...

  5. zjoj1706: [usaco2007 Nov]relays 奶牛接力跑

    矩阵乘法(快速幂) 为说明方便,这里让\(k\)为点数,\(n\)为路径长度. 先将点都离散化,这样最后的点只有\(2k\)个. 先考虑一种暴力,每次用\(O(k^3)\)的复杂度来暴力更新,设当前长 ...

  6. 【EF】Entity Framework使用

    一.EF框架之三种模式 Entity Framework是ORMapping的一种具体实现,那ORMapping又是什么呢? ORM--ObjectRelation Mapping,即对象关系映射框架 ...

  7. 2017.10.3 国庆清北 D3T2 公交车

    题目描述 LYK在玩一个游戏. 有k群小怪兽想乘坐公交车.第i群小怪兽想从xi出发乘坐公交车到yi.但公交车的容量只有M,而且这辆公交车只会从1号点行驶到n号点. LYK想让小怪兽们尽可能的到达自己想 ...

  8. Matlab中画图数学公式的输出格式

    1.可以在输出参数中选择 ('Interpreter', 'latex'). 2.字符序列中的数学表达式需用$$等形式括起来. 例子: text(6, 0.3, '$\leftarrow  y= 2^ ...

  9. C++ 如何进阶?

    1.C++的用途和意义 总体来说,C++作为一门软件开发语言,它的流行度是在减少的.主要原因在于语言的复杂和灵活导致软件开发成本提高,这体现在开发周期和人力上.它不适用于startup公司的快速开发, ...

  10. MySQL数据库设置表名区分大小写

    使用Mysql的朋友有时候会遇到表名称不区分大小写的情况,导致导入数据或者备份数据库很麻烦. 如何设置Mysql数据库表名区分大小写呢,配置如下: 一.修改Mysql的配置文件my.ini my.in ...