文档章节

python __xx__

c
 cics
发布于 2016/10/14 11:52
字数 466
阅读 5
收藏 0

__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)


 

© 著作权归作者所有

共有 人打赏支持
下一篇: python __dict__
c
粉丝 0
博文 63
码字总数 5820
作品 0
广州
程序员
私信 提问
小小树莓派鉴黄初体验 OpenNSFW on RPi

OpenNSFW是雅虎数年前已经训练好的一个鉴黄模型(是的只是模型而已,素材请自行解决)。既然已经在小树莓派上搭建好了Caffe,那么何不试试基于Caffe的鉴黄模型? Caffe环境 关于树莓派(64位...

煎鱼不可能有BUG
2018/05/21
0
0
学习笔记(11月07日)--类

四周二次课(11月7日) 一、 类的重写 1.1 重写一般方法 class A: def hello(self): print('Hello,i am A.')class B(A): passa = A()b = B()a.hello()b.hello() 结果: Hello,i am A.Hello,i......

wanyang_wanyang
2018/07/03
0
0
[ python import module ] 导入模块

import moudlename ----> import modulename.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) import 优先级高于 from module import xx 规则: 如果多个包,尽量......

_______-
2018/10/15
0
0
ubuntu忘记进程号如何停止进程

首先查出该指令执行的所有进程 ps aux|grep xx 例:假如我要查出所有用python运行的程序进程 ps aux|grep python 然后查出来之后,再去查看里面的不用进程号对应的文件名,然后删除...

疯子张
2014/08/22
0
0
Python str() 引发的 UnicodeEncodeError

起因 众所周知,Python 2 中的 UnicodeEncodeError 与 UnicodeDecodeError 是比较棘手的问题,有时候遇到这类问题的发生,总是一头雾水,感觉莫名其妙。甚至,《Fluent Python》的作者还提出...

浮生若梦的编程
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JS数组去重的几种常见方法

一、简单的去重方法 // 最简单数组去重法/** 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中* IE8以下不支持数组的indexOf方法* */function uniq(array){ var ...

Jack088
28分钟前
2
0
kafka 集群监控 (kafka Manager)

一、监控kafka工具有很多,但是对于运维人员来说kafka Manager 就可以了 二、下载kafkaManager 编译安装 地址https://github.com/yahoo/kafka-manager 三、下下来的是源码 需要在开始安装官方...

雁南飞丶
29分钟前
2
0
php开发环境搭建

一、wamp环境搭建 安装apache 安装mysql 解压php 在httpd.conf中配置apache,让apache支持php #加载php作为apache的一个模块 LoadModule php5_module "d:/server/php/php5apache2_4.dll" 5. ......

lujc
32分钟前
1
0
java+testng接口测试

最近写了三个接口,很不想写了,觉得好麻烦呀,用postman比这个简洁多了,为什么要写代码呀,为都要学习代码呀呀,我现在还没觉得手写代码比用工具工作上优势体现在哪里了~~知道的告诉我下...

EvanDev
40分钟前
2
0
反向代理(内网穿透)工具Ngrok安装

ngrok是一个反向代理工具,1.x版本源码开源;可以自己搭建一个服务来使用,将本地的web或tcp服务通过公共端口和外部建立一个安全通道,这样就可以通过外网直接访问本地对应的服务,在进行微信...

zerokb-小浪
48分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部