文档章节

python 中的内置函数 与 类

ludlows
 ludlows
发布于 2014/10/07 22:55
字数 936
阅读 11
收藏 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
2018/08/01
0
0
Python面向对象之运算符重载

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

bigstone2012
2018/06/08
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
python locals globals

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

Sophia_tj
2014/08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 没时间 没头发 但有钱

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @开源中国总经办主任 :分享齐一的单曲《这个年纪》 《这个年纪》- 齐一 手机党少年们想听歌,请使劲儿戳(这里) @肿肿卷 :我真的可以睡一天...

小小编辑
35分钟前
11
4
Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
今天
3
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
3
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部