文档章节

python 中的内置函数 与 类

ludlows
 ludlows
发布于 2014/10/07 22:55
字数 936
阅读 9
收藏 0

python这种语言的变量命名规则有些奇葩,我相信大家已经遇到过了,比如:__future__。这种特殊的形式表明,这个

变量有特殊的意义,你不可以在自己的代码中创造这类变量。

1.__init__() 构造函数

类似于c++,java等面向对象语言,python 在类的定义中也有构造函数,这就是__init__()

__init__(parameters)中的变量parameter用来构建这个类的变量

例如:

class newclass(object):
"""docsng for newclass"""
    def __init__(self, aStr):
        self.aStr = aStr
	print "constructor is been used. "+self.aStr+" has been created"
hahaha = newclass("hello")

结果就是,constructor is been used. hello has been created

2.__del__() 析构函数

python 不需要进行内存管理,当一个类被扔到垃圾箱(garbage-collected)的时候,这个函数就会发挥功效。但是,你不会知道具体它什么时候起作用,还是远离它比较好。

3说说__init__()被重载(override)的情况

class Bird(object):
    def __init__(self):
        self.hungry = True
    def eat(self):
	if self.hungry:
	    print "Great"
	    self.hungry = False
	else:
	    print "No,thanks"


如果运行如下程序:

aBird = singBird()
aBird.eat()
程序会报错,因为没有了self.hungry这个变量

解决办法为:

class singBird(Bird):
    def __init__(self):
	Bird.__init__(self)
	print "i am singing"



class singBird(Bird):
    def __init__(self):
	super(singBird,self).__init__()
	print "i am singing"


4.简述python类中常用的内置函数

假设我们有一个字典 aDict = {'a': 1,‘b’:2}

__len__(self) 返回序列中收集item的个数 ,对于空的字典,列表,字符串,元组,它们的逻辑值为False 

                      相当于len(aDict)

__getitem__(self,key) 返回与key相对应的值 。相当于aDict[key]

__setitem__(self.key,value) 将与key相对应的值设为value 。相当于aDict[key] = value

__delitem__(self,key) 将key与和key对应的item删掉      del(aDict[key])

对于序列(元组,列表,字符串)aList[-n] 相当于 aList[len(aList)-n]

5.静态方法(staticmethod)和类方法(classmethod)

class myclass(object):
    def smeth():
        print "this is a static method"
    def cmeth(cls):
        print "this is a class method",cls
    cmeth = classmethod(cmeth)

这就是传说中的装饰器 

class myclass(object):
    @staticmethod
    def smeth():
        print "this is a static method"
    @classmethod
    def cmeth(cls):
        print "this is a class method",cls
当你使用@字符时,装饰器(deractor)的使用就更加简便。

调用myclass.smeth() 输出 this is a static method

调用myclass.cmeth() 输出 this is a class method <class '__main__.myclass'>

6.attribute 函数

__getattribute__(slef,name) 当使用名字为name的attribute时自动调用

__getattr__(self,name) 当使用名字为name的attribute时,实际上并不存在名字为name的attribute时,自动调用

__setattr__(self,name,value)赋值自动调用

__delattr__(self,name) 删除自动调用

例如:

class Rectangle(object):
    def __init__(self):
        self.width = 0
        self.heigh = 0
    def __setattr__(self,name,value):
        if name  == 'width':
            self.width =value
        elif name == 'heigh':
            self.heigh = value
        else:
            raise AttributeError
    def __getattar__(self,name):
        if name == 'width':
            return self.width
        elif name == 'heigh':
            return self.heigh
        else:
            raise AttributeError

7. 迭代器Iterator

迭代器的功能非常强大,可以对任何对象进行循环

迭代的方式可以利用next()函数,或是for 循环

利用next()函数要注意:最后一个对象后,再进行next(),会产生StopIteration报错

注意:在python 3.0中,next() 函数变为__next__()

class Fibb(object):
    def __init__(self):
        self.a = 0
        self.b = 1
    def next(self):
        self.a,self.b = self.b, self.a + self.b
        return self.a
    def __iter__(self):
        return self
fib = Fibb()
print next(fib)
print fib.next()

for i in fib:
    if i >800:
        print i 
        break

总而言之,含有__iter__()的类都是可迭代的,

含有next()的类才是迭代器。

所以对可迭代的类可以使用iter()函数

例如:

a =iter("anasiaj")
print a.next()
print a.next()
于是,有的人就会问,自己创造的迭代器,可不可以自己设定结束点呢?

当然可以,StopIteration 就相当于循环中的break

例子如下:

class aIter(object):
    def __init__(self):
        self.value = 0
    def next(self):
        self.value += 1
        if self.value > 15:
            raise StopIteration
        return self.value
    def __iter__(self):
        return self
aList = list(aIter())
print aList









© 著作权归作者所有

共有 人打赏支持
ludlows
粉丝 0
博文 15
码字总数 4195
作品 0
海淀
程序员
我和Python的Py交易》》》》》》 命名空间的小弟作用域

命名空间的小弟作用域 在这要明确一个观点,在Python中万物皆对象,而变量指向的就是对象。 变量可以是 类名,函数名,储存数据的变量…… 对象可以是 类 ,被封装的一段代码(函数),数据…...

BarkingPig
08/01
0
0
python locals和globals

locals和globals 标记一下:Dive Into Python 内容 我们先偏离一下 HTML 处理的主题, 讨论一下 Python 如何处理变量。 Python 有两个内置的函数,locals和globals, 它们提供了基于 dictionary...

henosteven
2013/02/20
0
0
zg手册 之 python2.7.7源码分析(1)-- python中的对象

源代码主要目录结构 Demo: python 的示例程序 Doc: 文档 Grammar: 用BNF的语法定义了Python的全部语法,提供给解析器使用 Include: 头文件,在用c/c++编写扩展模块时使用 Lib: Python自...

东昕
2014/07/08
0
0
Supporting Python 3(支持python3)——语言区别和暂时解决方法

语言区别和暂时解决方法 这个附录包含一个Python 2和Python 3的不同之处列表以及能不用2to3转换同时在Python 2和Python 3下运行的示例代码。 这个列表是不完整的。在这里列出的只有不包括bug...

在湖闻樟
2015/11/20
0
0
Python面向对象之运算符重载

运算符重载只是意味着在类方法中拦截内置的操作,也就是说当类的实例出现在内置操作中,Python自动调用我们的方法,并且我们的方法的返回值变成了相应操作的结果。 关于重载的关键知识点: ...

bigstone2012
06/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

多线程

1. 多线程概念。并发和并行的概念。 多线程指的是一段时间内cpu同时执行多个线程。一个程序至少运行>=1个进程,进程就是运行中的程序,而一个进程至少运行>=1个线程,线程是操作系统能调度的...

鱼想吃肉
20分钟前
0
0
HBase 表修复在线方式和离线方式

一、在线修复 1.1 使用检查命令 $ ./bin/hbase hbck 该命令可完整修复 HBase 元数据信息;存在有错误信息会进行输出; 也可以通过如下命令查看详细信息: $ ./bin/hbase hbck -details 1.2 ...

Ryan-瑞恩
45分钟前
1
0
redis 系列二 -- 常用命令

1.基础命令 info ping quit save dbsize select flushdb flushall 2.键命令 2.1 set 直接赋值 set a a 2.2 get 取值 get a 2.3 exists 是否存在 exists a 2.4 expire 设置剩余时间 秒 expire......

imbiao
今天
2
0
php foreach

<?php// 数组的引用$a=array(1,2,3,4,5);foreach($a as $key=>&$value){$value=$value*2;}print_r($a);echo " $key -------------------$value\r\n";/** * ...

小张525
今天
3
0
12-利用思维导图梳理JavaSE-多线程

12-利用思维导图梳理JavaSE-多线程 主要内容 1.线程概念 2.线程开发 3.线程的状态 4.线程的同步和死锁 5.Java5.0并发库类 QQ/知识星球/个人WeChat/公众号二维码 本文为原创文章,如果对你有一...

飞鱼说编程
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部