Python的特殊属性和魔法函数
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的特殊属性和魔法函数的更多相关文章
- PythonI/O进阶学习笔记_2.魔法函数
前言: 本文一切观点和测试代码是在python3的基础上. Content: 1.什么是魔法函数,魔法函数__getitem__在python中应用. 2.python的数据模型和数据模型这种设计对p ...
- 【python学习笔记】9.魔法方法、属性和迭代器
[python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...
- Python的魔法函数系列 __getattrbute__和__getattr__
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys __metaclass__ = type """ _ ...
- Python魔法函数
python中定义的以__开头和结尾的的函数.可以随意定制类的特性.魔法函数定义好之后一般不需要我们自己去调用,而是解释器会自动帮我们调用. __getitem__(self, item) 将类编程一 ...
- python魔法函数之__getattr__与__getattribute__
getattr 在访问对象的属性不存在时,调用__getattr__,如果没有定义该魔法函数会报错 class Test: def __init__(self, name, age): self.na ...
- python进阶之魔法函数
__repr__ Python中这个__repr__函数,对应repr(object)这个函数,返回一个可以用来表示对象的可打印字符串.如果我们直接打印一个类,向下面这样 class A(): ...
- gj3 Python数据模型(魔法函数)
3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object): def __i ...
- python内置函数和魔法函数
内置方法:Python中声明每一个类系统都会加上一些默认内置方法,提供给系统调用该类的对象时使用.比如需要实例化一个对象时,需要调用该类的init方法:使用print去打印一个类时,其实调用的是str ...
- python魔法函数__dict__和__getattr__的妙用
python魔法函数__dict__和__getattr__的妙用 __dict__ __dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值. 既然__dict__是个字典那么我们就 ...
随机推荐
- MFC学习(五)常见面试题
1:应用程序类 CTestOneApp::InitInstance 可以看做是MFC程序的入口函数,main函数隐藏在这个函数中.实际开发中一般不需要对这个类进行操作,但如果要在建立主对话框之前处理一 ...
- C语言中字符数据的输入和输出
字符的输出 C语言中使用putchar函数来输出字符数据 #include <stdio.h> int main() { char a,b,c,d; //定义字符变量a,b,c,d a = ...
- js中的Math
js中的Math Math.round 取最接近的整数 Math.round(-2.7) // -3 Math.ceil 向上取整 Math.ceil(1.1) // 2 Math.floor 向下取 ...
- oracle 查询中实现分页
那么Oracle如何实现分页呢?--Oracle分页查询SELECT * FROM ( SELECT ROWNUM R,YANGCQ_ID,YANGCQ_BRANCHI ...
- logistic回归和线性回归
1.输出: 线性回归输出是连续的.具体的值(如具体房价123万元) 回归 逻辑回归的输出是0~1之间的概率,但可以把它理解成回答“是”或者“否”(即离散的二分类)的问题 分类 2.假设函数 线性回归: ...
- android 侧滑菜单
就是用手一滑才出现,占手机半个多屏幕的菜单.为了美观和页面转跳,很多时候要用到. 实现的话就是使用官方的DrawerLayout,注意这个布局一定要是最顶层的布局. 在DrawerLayout里面直接 ...
- Oracle行转列LISTAGG函数
工作过程中需要将查询的数据分组并显示在一行.以往的工作经验,在sql server中可以用for xml path来实现. 现提供Oracle数据库的行转列方式 oracle11g官方文档简介如下: ...
- Emgu学习之(一)----Emgu简介
OpenCV OpenCV是一个开源的跨平台的计算机视觉库,它的设计目标时执行速度尽量快,主要关注实时应用.可以运行在Linux.Windows.Mac OS.Android.IOS.Maemo.Fr ...
- 关于linux创建用户的有趣事情!
小博主今天接受了一项光荣的任务!为什么说是光荣任务呢?因为这个任务是需要创建一个linux用户!!! 肯定有小伙伴要嘲笑了!创建一个用户有什么难的啊! 对!这个并不难,即使是小白也能轻松应对! 但是! ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial
Lecture 5 Octave教程 5.1 基本操作 Basic Operations 5.2 移动数据 Moving Data Around 5.3 计算数据 Computing on Data ...