python魔法属性_python中的魔术属性与魔法方法

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__': , '__module__': '__main__', 'country': 'China', '__doc__': None, '__weakref__': , 'func': , '__init__': }

{'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() 方法的原理和这个自定义上下文管理器是一样的

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值