python中有很多以下划线开头和结尾的特殊属性和魔法函数,它们有着很重要的作用。

1.__doc__:说明性文档和信息,python自建,不需要我们定义。

 # -*- coding:utf- -*-

 class Person:
"""这里是描述性信息"""
def func(self):
pass if __name__ == '__main__':
print(Person.__doc__)

2.__init__():实例化方法,创建实例时自动执行。

 # -*- coding:utf- -*-

 class Person:
def __init__(self):
print("自动执行了__init__()方法") if __name__ == '__main__':
person = Person()

3.__module__和__class__

__module__:当前操作的对象属于哪一个模块,__class__:当前操作的对象属于哪一个类。

 # -*- coding:utf- -*-

 class Person:
def __init__(self):
print("自动执行了__init__()方法") if __name__ == '__main__':
person = Person()
print(person.__module__)
print(person.__class__) -------输出--------
__main__
<class '__main__.Person'>

4.__del__():当对象在内存中被释放时,自动执行该方法,该方法无限自定义,除非我们想要在对象释放时执行一些操作。

 # -*- coding:utf- -*-

 class Person:

     def __del__(self):
print("我被回收了") if __name__ == '__main__':
person = Person()

5.__call__():如果一个类编写了该方法,则该类的实例后面加括号时会调用此方法。

 # -*- coding:utf- -*-

 class Person:

     def __call__(self, *args, **kwargs):
print("执行了__call__") if __name__ == '__main__':
person = Person()
person()
print(callable(Person))

可以通过callable()函数判断一个类是否为可执行的。

6.__dict__:列出类或者对象中的所有成员。

# -*- coding:utf- -*-

class Person:
country = "中国"
def __init__(self, name, age):
self.name = name
self.age = age def func(self):
print("func") if __name__ == '__main__':
print(Person.__dict__)
person = Person("zhangsan", )
print(person.__dict__) -------输出结果--------
{'country': '中国', '__init__': <function Person.__init__ at 0x00000247F6218B70>, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, 'func': <function Person.func at 0x00000247F6218BF8>, '__doc__': None}
{'age': , 'name': 'zhangsan'}

7.__str__():如果一个类定义了这个方法,则在打印对象时会自动执行该方法。

 # -*- coding:utf- -*-

 class Person:

     def __init__(self, name, age):
self.name = name
self.age = age def __str__(self):
return "name:"+self.name+"----age:"+self.age if __name__ == '__main__':
person = Person("zhangsan", "")
print(person) ------输出结-------
name:zhangsan----age:

8.__getitem__(),__setitem()__.__delitem__():取数据,设置数据,删除数据。

 aa = 标识符[]    # 执行__getitem__()
标识符[] = bb # 执行__setitem__()
del 标识符[] # 执行__delitem__()
 # -*- coding:utf- -*-

 class Person:
def __setitem__(self, key, value):
print("执行了__setitem__()") def __getitem__(self, item):
print("执行了__getitem__()") def __delitem__(self, key):
print("执行了__delitem__()") if __name__ == '__main__':
person = Person()
r = person['a']
person['a'] = "AAA"
del person['a'] --------输出结果-------
执行了__getitem__()
执行了__setitem__()
执行了__delitem__()

9.__iter__():如果想让自定义的类的对象可以被迭代,则需要定义该方法,并返回一个可迭代的对象。

 # -*- coding:utf- -*-

 class Person:

     def __iter__(self):
yield
yield
yield if __name__ == '__main__':
person = Person()
for p in person:
print(p) ------输出结果-------

10.__len__():获取对象的长度。

In []: 'ABCDE'.__len__()
Out[]: In []: len('ABCDE')
Out[]:

11.__repr__():返回开发可以看到的字符串,与__str__()的区别是__str__()返回用户可以看到的字符串,通常两者代码一样。

 # -*- coding:utf- -*-

 class Person:

     def __init__(self, name):
self.name = name def __str__(self):
return "this is %s" % self.name __repr__ = __str__ if __name__ == '__main__':
person = Person("张三")
print(person) print(person.__repr__()) ------输出结果-------
this is 张三
this is 张三

12.__add__:加法,__sub__:减法,__mul__:乘法,__div__:除法,__mod__:求与运算,__pow__:幂运算

 class Calculator:

     def __init__(self, a):
self.a = a def __add__(self, other):
return self.a + other.a if __name__ == '__main__':
a = Calculator()
b = Calculator()
print(a + b)

13.__author__:表示作者信息。

 # -*- coding:utf- -*-

 __author__ = "boxiaoyuan"

 class Calculator:

     def show(self):
print(__author__) if __name__ == '__main__':
a = Calculator()
a.show()

14.__slots__:可以限制实例的变量只可以添加哪些属性。

 # -*- coding:utf- -*-

 def show(self):
print("hello world") class Person: def __init__(self):
pass __slots__ = ("name","age") p = Person()
p.name = "zhangsan"
p.age = ""
# p.sex = "男"
Person.show = show # 无法限制为类添加方法
p.show()

Python的特殊属性和魔法函数的更多相关文章

  1. PythonI/O进阶学习笔记_2.魔法函数

    前言: 本文一切观点和测试代码是在python3的基础上. Content: 1.什么是魔法函数,魔法函数__getitem__在python中应用. 2.python的数据模型和数据模型这种设计对p ...

  2. 【python学习笔记】9.魔法方法、属性和迭代器

    [python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...

  3. Python的魔法函数系列 __getattrbute__和__getattr__

      #!/usr/bin/env python # -*- coding: utf-8 -*- import sys __metaclass__ = type """ _ ...

  4. Python魔法函数

    python中定义的以__开头和结尾的的函数.可以随意定制类的特性.魔法函数定义好之后一般不需要我们自己去调用,而是解释器会自动帮我们调用. __getitem__(self, item) 将类编程一 ...

  5. python魔法函数之__getattr__与__getattribute__

    getattr 在访问对象的属性不存在时,调用__getattr__,如果没有定义该魔法函数会报错 class Test: def __init__(self, name, age): self.na ...

  6. python进阶之魔法函数

    __repr__ Python中这个__repr__函数,对应repr(object)这个函数,返回一个可以用来表示对象的可打印字符串.如果我们直接打印一个类,向下面这样 class A():     ...

  7. gj3 Python数据模型(魔法函数)

    3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object): def __i ...

  8. python内置函数和魔法函数

    内置方法:Python中声明每一个类系统都会加上一些默认内置方法,提供给系统调用该类的对象时使用.比如需要实例化一个对象时,需要调用该类的init方法:使用print去打印一个类时,其实调用的是str ...

  9. python魔法函数__dict__和__getattr__的妙用

    python魔法函数__dict__和__getattr__的妙用 __dict__ __dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值. 既然__dict__是个字典那么我们就 ...

随机推荐

  1. 如何检测 51单片机IO口的下降沿

    下降沿检测,说白了就是满足这样一个逻辑,上次检测是1,这次检测是0,就是下降沿. 从这个条件可知,要确保能够正确检测到一个下降沿,负脉冲的宽度,必须大于一个检测周期,当负脉冲宽度小于一个检测周期,就有 ...

  2. WP10通过StreamSocket连接C++服务器

    注:当服务端和手机模拟器运行在一台机器时,会有奇怪错误.将服务端放在其它机器上更改客户端连接地址,运行正常.或者直接用本机modern调试也可以. 实例化一个对象 StreamSocket _clie ...

  3. springboot成神之——spring boot,spring jdbc和spring transaction的使用

    本文介绍spring boot,spring jdbc和spring transaction的使用 项目结构 依赖 application model层 mapper层 dao层 exception层 ...

  4. Windows修改MySQL用户root密码

    MySQL是一个关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软 ...

  5. 2014.9.30 Double转字符

    (57.0/60.0).ToString("f2")="0.95" 等于 string.Format("{0:F2}",57.0/60)=& ...

  6. day3心得

    1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >>&g ...

  7. php SqlServer 中文汉字乱码

    php SqlServer 中文汉字乱码,用iconv函数转换 查询显示的时候,从GB转换为UTF8 <?php echo iconv('GB2312','UTF-8',$row['Name'] ...

  8. RequestParam注解的Url参数被省略时该如何处理

    RequestParam注解的Url参数被省略时该如何处理 1.RequestParam的用法 ==================== RequestParam注解可以把包含在Url中的参数映射到U ...

  9. FZU2282 Wand

    题意 n个数字,要求至少k个数字位置不变,其余进行错排的方案数 分析 错排公式: D(n)=(n-1)[D(n-2)+D(n-1)]  如果n个数字,i个数字位置不变,其余进行错排的的方案数是C(n, ...

  10. 3-No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案

    转载:http://www.360doc.com/content/15/0316/15/9200790_455576135.shtml 由于我在配置安卓环境时也碰到了类似问题,用这篇博客解决了主要问题 ...