python __xx__
博客专区 > cics 的博客 > 博客详情
python __xx__
cics 发表于2年前
python __xx__
  • 发表于 2年前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

__slots__ 

限定对象绑定

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class TestCls(object):

    __slots__ = ('func1', 'func2')  #限制实例只能绑定func1, func2

def func3():
    print 's'

def func4(self):
    print 'func4'

if __name__ == '__main__':
    #实例绑定
    obj = TestCls()
    #obj.func3 = func3
    #obj.func3()
    #AttributeError: 'TestCls' object has no attribute 'func3'

    #类绑定
    TestCls.func4 = func4  #绑定之后所有的实例都可以使用,包括绑定之前生成的实例
    obj2 = TestCls()
    obj2.func4()
    obj.func4()
    #print func4

__all__

模块限定数据对象

#__init__.py

from mod1 import Mod1
from mod2 import Mod2
from mod3 import Mod3

__all__ = ['Mod1', 'Mod2']

#只能导入Mod1, Mod2

__str__(), __repr__()

返回显示字符串

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class TestCls(object):
    def __str__(self):
        return 'test cls str'

    __repr__ = __str__


if __name__ == '__main__':
    testCls = TestCls()
    print testCls  #使用__str__
    
    #调试输入testCls 直接显示test cls str。使用__repr__

__iter__

类迭代,实现__iter__, next()函数

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class TestCls(object):
    def __init__(self):
        self.a = 1
        self.alist = [1, 2, 3, 4, 5]

    def __iter__(self):
        return self  #迭代器指针

    def next(self):
        if self.a > 10:
            raise StopIteration()
        self.a += 1
        return self.a


if __name__ == '__main__':
    testCls = TestCls()
    for n in testCls.alist:
        print testCls.next()

    #可以直接遍历实例
    
    for iter in testCls:
        pass 
    

__getattr__

调用不存在时会调用此函数

可以用来动态设置成员

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class TestCls(object):
    def __init__(self):
        self.a = 1


    def __getattr__(self, item):

        setattr(self, item, 3)
        return getattr(self, item)


if __name__ == '__main__':
    testCls = TestCls()
    print testCls.func


__setattr__

类中实现了此方法,在绑定属性时会自动调用此方法

#!/usr/bin/env python
# -*- coding:utf-8 -*-



class TestCls(object):

    def __init__(self):
        self.id = 3   #转入调用__setattr__

    def __setattr__(self, key, value):
        """
        绑定属性时调用此方法
        """
        #self.name = value  #不能使用self.attr方式,会造成递归调用__setattr__

        self.__dict__[key] = value
        object.__setattr__(self, key, value)


if __name__ == '__main__':
    testCls = TestCls()
    testCls.name = ''  #转入调用__setattr__



__call__

实现实例当作函数调用

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class TestCls(object):
    def __init__(self):
        self.a = 1

    def __getattr__(self, item):
        return TestCls()

        setattr(self, item, 3)
        return getattr(self, item)

    def __call__(self, *args, **kwargs):
        return args


if __name__ == '__main__':
    testCls = TestCls()
    print testCls(1,2,3)


 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 14
码字总数 5770
×
cics
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: