魔法属性

python有些类属性中,存在着一些具有特殊含义的属性

  • __new__

__new__是在新式类中新出现的方法,它作用是在构造方法init()建造实例之前,控制是否创建对象,可用于单例模式

__new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供

必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意

可以return父类__new__出来的实例,或者直接是object的__new__出来的实例



  • __init__

初始化方法,通过类创建对象时,自动触发执行

__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,

__init__不需要返回值



  • __str__

当使用print输出对象的时候,默认打印对象的内存地址。

如果类定义了__str__(self)方法,那么就会打印从在这个方法中 return 的数据

__str__方法通常返回一个字符串,作为这个对象的描述信息



  • __del__

当删除对象时,python解释器会默认调用一个方法,这个方法为__del__()方法

当有变量保存了一个对象的引用时,此对象的引用计数就会加1;

当使用del() 删除变量指向的对象时,则会减少对象的引用计数。

如果对象的引用计数不为1,那么会让这个对象的引用计数减1,

当对象的引用计数为0的时候,则对象才会被真正删除(内存被回收)。



  • __doc__

表示类的描述信息



  • __class__

__class__ 表示当前操作的对象的类是什么



  • __module__

__module__ 表示当前操作的对象在那个模块



  • __call__

对象后面加括号,触发执行。

__init__方法的执行是由创建对象触发的,即:对象 = 类名();

而对于__call__方法的执行是由对象后加括号触发的,即:对象()或者  类( )( )



  • __dict__

获取类或对象中的所有属性。

类的实例属性属于对象;类中的类属性和方法等属于类

print(类.__dict__)

输出:{ '__dict__' : <类属性、方法>, ...... }

print(实例对象.__dict__)

输出:{ 'name' : 'name1' , 实例对象的属性 ...... }



  • __getitem__    、  __setitem__     、   __delitem__

用于索引操作,如字典。

以上分别表示获取、设置、删除数据

举个黎姿:

# -*- 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)




obj = Foo()


result = obj['k1']      # 自动触发执行 __getitem__
obj['k2'] = 'laowang'   # 自动触发执行 __setitem__
del obj['k1']           # 自动触发执行 __delitem__



  • __getslice__     、   __setslice__     、   __delslice__

该三个方法用于分片操作,如:列表

也举个黎姿:

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


class Foo(object):


    def __getslice__(self, i, j):
        print('__getslice__', i, j)


    def __setslice__(self, i, j, sequence):
        print('__setslice__', i, j)


    def __delslice__(self, i, j):
        print('__delslice__', i, j)


obj = Foo()


obj[-1:1]                   # 自动触发执行 __getslice__
obj[0:1] = [11,22,33,44]    # 自动触发执行 __setslice__

del obj[0:2]                # 自动触发执行 __delslice__





小楼昨夜又东风


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值