1.魔法属性

·  1.1__doc__魔法属性  表示类的描述信息

class Fo:
""" 这是今天第一个魔术属性__doc__"""
def func(self):
pass print(Fo.__doc__)

  运行结果

这是今天第一个魔术属性__doc__

  1.2.__moudle__魔法属性  表示当前操作的对象在那个模块

dome1.py

# -*- coding:utf-8 -*-

class Person(object):
def __init__(self):
self.name =' __moudle__'

  

dom2.py

from dome1 import Person

obj = Person()
print(obj.__module__)

  运行结果

dome1

  1.3 __class__魔法属性   表示当前操作的对象的类是什么

dome1.py

# -*- coding:utf-8 -*-

class Person(object):
def __init__(self):
self.name =' __moudle__'

  

dom2.py

from dome1 import Person

obj = Person()
print(obj.__class__)

  运行结果

Person

2.魔法方法

  2.1 __init__ () 魔法方法   初始化类属性方法,通过类创建对象时,自动触发执行

class Person:
def __init__(self, name):
self.name = name
self.age = 18 obj = Person('python')
obj.name

  运行结果

python

  2.2 __del__() 魔法方法  当对象在内存中被释放时,自动触发执行

class Dome:
def __del__(self):
print('类已经被删除')
obj = Dome()

  运行结果

类已经被删除

  2.3 __str__ () 魔法方法   打印 对象 时,默认输出该方法的返回值

class Dome:
def __str__(self):
return 'python'
obj = Dome()
print(obj)

  运行结果

python

  2.4 __dict__() 魔法方法  类或对象中的所有属性

class Province(object):
country = 'China' def __init__(self, name, count):
self.name = name
self.count = count def func(self, *args, **kwargs):
print('func') # 获取类的属性,即:类属性、方法、
print(Province.__dict__) obj1 = Province('山东', 10000)
print(obj1.__dict__) obj2 = Province('山西', 20000)
print(obj2.__dict__)

  运行结果

{'__dict__': <attribute '__dict__' of 'Province' objects>, '__module__': '__main__', 'country': 'China', '__doc__': None, '__weakref__': <attribute '__weakref__' of 'Province' objects>, 'func': <function Province.func at 0x101897950>, '__init__': <function Province.__init__ at 0x1018978c8>}

{'count': 10000, 'name': '山东'}

{'count': 20000, 'name': '山西'}

  2.6 __getitem__(),__setitem__(),__delitem__()魔法方法 用于索引操作,如字典。以上分别表示获取、设置、删除数据

# -*- coding:utf-8 -*-

class Dome(object):

    def __getitem__(self, key):
print('__getitem__', key) def __setitem__(self, key, value):
print('__setitem__', key, value) def __delitem__(self, key):
print('__delitem__', key) obj = Dome() result = obj['R1'] # 自动触发执行 __getitem__
obj['R2'] = 'laotie' # 自动触发执行 __setitem__
del obj['R1'] # 自动触发执行 __delitem__

  运行结果

__getitem__ R1
__setitem__ R2 python
__delitem__ R1

  由于这三个方法单独使用没作用,所以通常配合使用来实现某种功能

  2.7 __iter__()魔法方法 让一个对象变得可以迭代

  由于前面迭代器已经进行了详细的说明,如果有疑问的朋友可以翻下我关于迭代器的博客

  2.8 __next__()魔法方法 定义一个迭代器,让其能够通过next(迭代对象的迭代器)对一个可迭代对象进行迭代

  由于前面迭代器已经进行了详细的说明,如果有疑问的朋友可以翻下我关于迭代器的博客

  2.9 __name__()魔法方法 

  这个魔法方法,并不作用于类(这里我把它归为魔法方法可能不够严谨),当前程序的名称

# -*- coding:utf-8 -*-

class Foo(object):

    def __getitem__(self, key):
print('__getitem__', key) def __setitem__(self, key, value):
print('__setitem__', key, value) def __delitem__(self, key):
print('__delitem__', key)
if __name__ == '__main__': obj = Foo() result = obj['R1'] # 自动触发执行 __getitem__
obj['R2'] = 'python' # 自动触发执行 __setitem__
del obj['R1'] # 自动触发执行 __delitem__

  运行结果

__getitem__ R1
__setitem__ R2 python
__delitem__ R1

  注意,该方法所在的.py文件如果作为一个工具包引入时,它里面包括的代码不会被引入,通常作为开发人员的调试空间(为所欲为也不会被外界发现)

  2.10 __enter__(),__exit__() 魔法方法,上下文管理器时使用

  __enter__() 进入‘上文操作’,__exit__()进入下文操作

  

class File():

    def __init__(self, filename, mode):
self.filename = filename
self.mode = mode def __enter__(self):
print("进入了上文操作!")
self.f = open(self.filename, self.mode)
return self.f def __exit__(self, *args):
print("进入了下文操作!")
self.f.close()

  当调用该类打开一个文件时,会自动调用__enter__()方法打开文件,但文件调用完成后会自动给调用__exit__()方法关闭文件,以免造成内存的浪费,顺便说下:with open() 方法的原理和这个自定义上下文管理器是一样的

由于前面的博客有些魔法方法已经做了解析,所以这次就没有进行详细的说明,所以可能有些魔法属性和魔法方法没有总结上去,欢迎大家补充

  

python中的魔术属性与魔法方法的更多相关文章

  1. 面向对象相关概念与在python中的面向对象知识(魔法方法+反射+元类+鸭子类型)

    面向对象知识 封装 封装的原理是,其成员变量代表对象的属性,方法代表这个对象的动作真正的封装是,经过深入的思考,做出良好的抽象(设计属性时用到),给出“完整且最小”的接口,并使得内部细节可以对外透明( ...

  2. python中几个常见的魔法方法

    首先,什么是魔法方法呢?在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做"魔法"方法. __ init__()方法 当一个实例被创建的时候调用的初始 ...

  3. Python中变量的属性以及判断方法

    1.变量的属性 在Python中,创建一个变量会给这个变量分配三种属性: id ,代表该变量在内存中的地址: type,代表该变量的类型: value,该变量的值: x = 10 print(id(x ...

  4. Python笔记(二十六)_魔法方法_属性的魔法方法

    属性的魔法方法 __getattribute__(self,name):当该类的属性被访问时,自动触发,是最先被触发的属性方法 __setattr__(self,name,value):当一个属性被设 ...

  5. Python中的私有属性私有方法、类属性类方法以及单例设计模式

    私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法.在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线) 公有方法可以通过对象名直接调用,私有方法不能通过对象名直接调用,只 ...

  6. Python学习笔记(七)——魔法方法

    1.构造和析造 魔法方法就是被双下划线包围的方法 __init__()方法 __init__方法默认没有参数,返回值为none.类实例化对象需有明确的初始化步骤要重写函数 >>> c ...

  7. Python中的str与unicode处理方法

    Python中的str与unicode处理方法 2015/03/25 · 基础知识 · 3 评论· Python 分享到:42 原文出处: liuaiqi627 的博客    python2.x中处理 ...

  8. python中的实例属性和类属性

    在python中,类属性和实例属性的区别是什么? 我认为是作用域的不同,实例对象可以访问类属性,类对象不可以访问实例属性.(类的概念本身就是作用域的概念,你不能让一只猫会飞,猫属于猫类,这一类都不会飞 ...

  9. C++:调整基类成员在派生类中的访问属性的其他方法(同名成员和访问声明)

    4.3 调整基类成员在派生类中的访问属性的其他方法 4.3.1 同名函数 在定义派生类的时候,C++语言允许在派生类中说明的成员与基类中的成员名字相同,也就是 说,派生类可以重新说明与基类成员同名的成 ...

随机推荐

  1. 调用百度汇率api 获取各国的汇率值

    设置一个定时任务,每天更新汇率java代码如下 package com.thinkgem.jeesite.modules.huiLvApi.service; import java.io.Buffer ...

  2. win32下的命令行集合 (最优秀的工具)

    HIDECMD.rar下载:以隐藏窗口的方式运行批处理. curl.exe 7.12.2 文件传输 593,670 curl是一个利用URL语法在命令行方式下工作的的文件传输工具 E6ED60CDA8 ...

  3. Lesson 10 Silicon valley

    What does the computer industry thrive on apart from anarchy? Technology trends may push Silicon Val ...

  4. Mini_Linux需要搭的环境

    1.bash:ifconfig:command not found sudo yum install -y net-tools 2.如果Linux系统是通过复制得到  需要更改hostname vi ...

  5. jgrid异步数据加载

    参考:https://blog.csdn.net/hurryjiang/article/details/7077725

  6. GIMP

    1. 认识GIMP 2. GIMP与Photoshop的对比 3. GIMP官方手册教程 4. 2本GIMP的外文书下载 5. 2个外部入门教程 6. 其他相关软件 1. 认识GIMP GIMP是可用 ...

  7. liunx开源打印驱动foo2zjs编译小坑

    在编译foo2zjs时出现 ## Dependencies...# *** *** Error: gs is not installed! *** *** Install ghostscript (g ...

  8. SystemVerilog基本语法总结(中)

    Systemverilog 语法总结(中) 上一个博客分享了SV基本的概念,这一博客继续分享,等下一个博客分享一个公司的验证的笔试题目. l 事件 背景: Verilog中当一个线程在一个事件上发生阻 ...

  9. 安装redis集群

    1.搭建集群需要使用到官方提供的ruby脚本. 需要安装ruby的环境. 安装ruby yum install ruby yum install rubygems 2.将ruby包redis-3.0. ...

  10. 吴裕雄--天生自然JAVAIO操作学习笔记:IO操作实例、Scanner、数据操作流与合并流

    import java.io.* ; public class ExecDemo01{ public static void main(String args[]) throws Exception{ ...