文档章节

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)


 

© 著作权归作者所有

共有 人打赏支持
c
粉丝 0
博文 63
码字总数 5820
作品 0
广州
程序员
CentOS 6.4下安装Django

Django是一个基于python的网站开发框架,笔者学过了python的基本知识,对用python进行网站开发颇有兴趣。于是想安装一个在本地研究一下。 笔者本地操作系统是:CentOS 6.4,Linux内核:2.6.3...

临峰不畏
2014/06/08
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
07/03
0
0
[ python import module ] 导入模块

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

_______-
10/15
0
0
Python 用于网站抓取 登录 发布的模块介绍

由于目前的Web开发中AJAX、Javascript、CSS的大量使用,一些网站上的重要数据是由Ajax或Javascript动态生成的,并不能直接通过解析html页面内容就能获得(例如采用mechanize、lxml、Beautif...

shaohan
2014/03/20
0
0
小小树莓派鉴黄初体验 OpenNSFW on RPi

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

煎鱼不可能有BUG
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
2
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
3
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
1
0
OSChina 周四乱弹 —— 上帝对我单身年限的惩罚越来越长了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享张卫健的单曲《身体健康》 《身体健康》- 张卫健 手机党少年们想听歌,请使劲儿戳(这里) 昨天是重阳节咯, 可惜小小编辑总是晚...

小小编辑
今天
12
1
django rest framework 外键序列化方法与问题总结

django rest framework 外键序列化方法与问题总结 当借口中需要出现一对多关系的时候,我们可以用rest_framwork的序列化功能来处理,代码如下. # models.pyfrom django.db import modelscl...

_Change_
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部