文档章节

python 中的内置函数 与 类

ludlows
 ludlows
发布于 2014/10/07 22:55
字数 936
阅读 9
收藏 0
点赞 0
评论 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 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
python locals globals

Python有两个内置的函数,locals() 和globals(),它们提供了基于字典的访问局部和全局变量的方式。 首先,是关于名字空间的一个名词解释。是枯燥,但是很重要,所以要耐心些。Python使用叫做...

Sophia_tj
2014/08/20
0
0
(总结)python 3程序开发指南(六)面向对象程序设计

1.在python中每个内置的类、类库以及我们创建的每个类都直接或间接地从最顶层的基类----object类衍生而来。 2.我们可以通过在类中实现len、add方法来支持len()、add()函数 3.python面向对象编...

索隆
2012/04/27
0
0
Python 2 和 Python 3 有哪些主要区别?

语法 print不再是语句,而是函数,比如原来是 print 'abc' 现在是 print('abc') 但是 python2.6+ 可以使用 from future import print_function 来实现相同功能 在Python 3中,没有旧式类,只...

cooffeelis
03/05
0
0
四Python对象和面向对象(一)

1.使用from module import导入模块 Python有两种导入模块的方法,两种都有用,一种前面已经介绍过了为:import module;第二种导入的基本语法为:from module import attr,和第一种的一个重...

dkz
2013/02/20
0
0
Python编程规范及性能优化

Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -- coding:utf-8 -- 。设置编辑器,默认保存为 utf-8 格式。 注释 业界普遍认同 Python 的注释分为...

陶邦仁
2013/01/16
0
1
转-深入探讨Ruby与Python语法比较

自:http://developer.51cto.com/art/200912/169306.htm 1. Ruby的case可以匹配很多东西:范围/数组,对象,正则表达,python没有case/switch而使用if/else比较死板点 2. python的缩进很漂亮...

玉龙
2011/10/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java示例演示Functor 和monad

This article was initially an appendix in our Reactive Programming with RxJavabook. However introduction to monads, albeit very much related to reactive programming, didn't suit......

Quan全
15分钟前
0
0
微信官方jssdk Demo

1.html部分 <!DOCTYPE html><!-- saved from url=(0028){sh:$selfUrl} --><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta charset="utf-8"......

koloor
18分钟前
0
0
数据库命名规范

https://www.cnblogs.com/pangguoming/p/7126512.html 摘要:当前研发工作中经常出现因数据库表、数据库表字段格式不规则而影响开发进度的问题,在后续开发使用原来数据库表时,也会因为数据...

塔塔米
18分钟前
0
0
java https 请求工具类-通用

package com.ra.common.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintW......

轻量级赤影
19分钟前
0
0
MFC界面套包BCG Pro Edition for MFC正式发布v27.3|附下载

BCGControlBar Professional Edition for MFC是MFC的一个扩展库,您可以用来构建类似于Microsoft Office 2000/XP/2003/2007/2010/2013 和 Microsoft Visual Studio-like(打印、用户定制工具......

Miss_Hello_World
19分钟前
0
0
Spring Cloud云服务 - HongHu架构common-service 项目构建过程

上一篇我们介绍了《整合spring cloud云服务架构 - HongHu云架构common-service代码结构分析》,本节我们将对common-service整个项目进行剖析,将整个构建的流程给记录下来,让更多的关注者来...

itcloud
20分钟前
0
0
Connection reset

在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家。例如我们线上的网关日志就会...

夜黑人模糊灬
24分钟前
0
0
如何写PHP规范注释

所有的文档标记都是在每一行的 * 后面以@开头。如果在一段话的中间出来@的标记,这个标记将会被当做普通内容而被忽略掉。 @access 该标记用于指明关键字的存取权限:private、public或prote...

度_
25分钟前
0
0
influxDB Ppostgis

PostGis 1.需要安装postgreSQL,postgis作为插件嵌入到postgreSQL中; 2.使用zip包直接安装,需要修改 makepostgisdb_using_extensions.bat文件中的路径,用户名,密码,然后直接运行; 3.没有...

courtzjl
29分钟前
0
0
多线程Thread-多线程顺序执行

需求:现在有两个任务,任务1和任务2,任务1中有多个线程,并且任务2必须等任务1完成后才能执行。 namespace TThread{ class Program { static void Main(string[] ar...

kaixinguo314
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部