当前位置:首页 » 编程语言 » python类的特殊方法

python类的特殊方法

发布时间: 2022-05-27 23:29:44

python的特殊方法__nonzero__()怎么用什么情况就会调用它,举个例子,谢谢

类的__nonzero__方法用于将类转换为布尔值。通常在用类进行判断和将类转换成布尔值时调用。比如语句if A: print 'foo'中就会调用A.__nonzero__()来判断。下面这个程序应该能帮助你理解__nonzero__的作用。

class A:
def __nonzero__(self):
print 'A._nonzero__()'
return True

print 'A is not zero' if A() else 'A is zero'
print bool(A())

Ⅱ Python中的几种特殊数据类型小结

下面介绍了Python中的6种特殊数据类型:

1.list:列表

是一种有序的数据集合,在列表数据结构中的类型并不唯一

定义形式:L=['Micha',100,True]

输出整个列表的时候显示为['Micha',100,True]

输出单个的数值则为:Micha

a.访问,直接使用L[0]表示第一个元素或者使用L[-1]表示最后一个数据,以此类推,但是注意访问不能越界(访问的序号不能超过元素的总数)。

b.添加新元素:使用L.append(100)直接将100加入列表末尾,或者使用L.insert(0,'paul')将paul插入任意位置。

c.删除元素:L.pop()删除最后一个元素,或者L.pop(2)删除第2个位置的元素。

d.替换元素:直接赋值就可以了L[2]=100

2.tuple:元组

是一种有序的列表,但是其一旦创立完毕就不能够更改,即不能插入,删除里面的元素,访问的方式跟List结构一致。

a.t=()其打印后输出的形式是()

若t中的数据为一个数字则需要在后面加逗号,以区分普通数字,如t=(1,),打印出(1,)而非1,多元素的话则没有这个要求。

b.可以在不变的tuple中加入可变的List如t=(‘a’,'b',['A','B'])

3.dict:字典

d = {

'Adam': 95,

'Lisa': 85,

'Bart': 59

}

len()函数可以计算任意集合的大小

其中可以简单地使用d[key]的形式来查找对应的value,这和list很像,不同之处是,list必须使用索引返回对应的元素,而dict使用key,当key不存在的时候,使用该key可能出现错误,因此:要避免KeyError发生,有两个办法:

一是先判断一下key是否存在,用in操作符:

if'Paul' in d:

print d['Paul']

如果'Paul'不存在,if语句判断为False,自然不会执行print d['Paul'],从而避免了错误。

二是使用dict本身提供的一个get方法,在Key不存在的时候,返回None:

>>>print d.get('Bart')

59

a.dict中的key不能重复,且dict中的存储的对应值没有顺序,打印出的东西可能是无序的

b.dict的更新:使用d[‘paul']=72求解

c.dict遍历:

d = {'Adam': 95, 'Lisa': 85, 'Bart': 59 }

>>>for key in d:

...print key

遍历只能获得key的值,需要通过key值获得对应的value

4.set:集合

无序但是所有元素唯一,不重复

a.定义:s = set(['A', 'B', 'C']),查看set的内容:

>>>print s

set(['A','C', 'B'])

可以用in来判断是否存在于集合中

b.遍历

s =set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])

for xin s:

print x[0]+':',x[1]

c.添加元素到集合中

s.add(4)

d.删除元素

s.remove(4)若该元素不在集合中将会报错

5.Unicode编码

Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示,比如:

printu'中文'

注意:不加u,中文就不能正常显示中文。

a.转义形式:u'中文 日文 韩文'

b.输出多行:

u'''第一行

第二行'''

c.raw+多行的形式:

ur'''Python的Unicode字符串支持"中文",

"日文",

"韩文"等多种语言'''

如果中文字符串在Python环境下遇到UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释

# -*-coding: utf-8 -*-

目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++另存为, 并选择UTF-8格式保存。

6.raw的作用

如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀r,表示这是一个“raw”字符串,里面的字符就不需要转义了。例如:

r'(~_~)//'

但是r'...'表示法不能表示多行字符串,也不能表示包含'和"的字符串,如果要表示多行字符串。

Ⅲ python类中属性方法的事件

1普通方法:直接用self调用的方法。



2私有方法:__函数名,只能在类中被调用的方法。



3属性方法:@property,将方法伪装成为属性,让代码看起来更合理。



4特殊方法(双下划线方法):以__init__为例,是用来封装实例化对象的属性,只要是实例化对象就一定会执行__init方法,如果对象子类中没有则会寻找父类(超类),如果父类(超类)也没有,则直接继承object(python 3.x)类,执行类中的__init__方法。



5类方法:通过类名的调用去操作公共模板中的属性和方法。



6静态方法:不用传入类空间、对象的方法, 作用是保证代码的一致性,规范性,可以完全独立类外的一个方法,但是为了代码的一致性统一的放到某个模块(py文件)中。

Ⅳ python 特殊方法定制类__radd__ and __iadd__()如何使用的

__radd__是自定义的类操作符,执行“右加”。当python解释器执行到a+b这样的语句时,首先在查找a中有没有__add__操作符,如果a中没有定义,那么就在b中查找并执行__radd__。
下面是个简单例子
class A:
pass
class B:
def __radd__(self, a):
print 'B.__radd__'
return a.v + self.v
class C:
def __add__(self, b):
print 'C.__add__'
return self.v + b.v
a = A()
a.v = 1
b = B()
b.v = 2
c = C()
c.v = 3
print a + b #因为a中没有__add__,所以调用的是B.__radd__
print c + b #c中有__add__,所以调用的是C.__add__

至于__iadd__(),是运算符类operator的成员函数,就是累加操作符的另一种调用形式。
a = operator.__iadd__(a, b)就等价于a += b

Ⅳ Python如何调用特殊函数

__call__
在Python中,函数其实是一个对象:
>>> f = abs
>>> f.__name__
'abs'
>>> f(-123)
由于 f 可以被调用,所以,f 被称为可调用对象。
所有的函数都是可调用对象。
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
我们把 Person 类变成一个可调用对象:
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __call__(self, friend):
print 'My name is %s...' % self.name
print 'My friend is %s...' % friend
现在可以对 Person 实例直接调用:
>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...
单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显着。
任务
改进一下前面定义的斐波那契数列:
class Fib(object):
???
请加一个__call__方法,让调用更简单:
>>> f = Fib()
>>> print f(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Ⅵ 在Python中定义类时,与运算符“//”对应的特殊方法名为____。

在Python中定义类时,与运算符“//”对应的特殊方法名为__floordiv__

Ⅶ python中什么是特殊方法

构造序列
1._len_(self)
2._getitem_(self,key)
3._setitem_(self,key,value)
4._delitem_(self,key)
程序演示:
myseq.py
class MySeq:
def __init__(self):
self.lseq = ["I","II","III","IV"]
def __len__(self):
return len(self.lseq)
def __getitem__(self,key):
if 0 <= key < 4:
return self.lseq[key]
if __name__ == '__main__':
m = MySeq()
for i in range(4):
print(m[i])

热点内容
ark手游怎么免费创建私人服务器 发布:2025-02-12 12:51:51 浏览:400
linux键盘布局 发布:2025-02-12 12:50:57 浏览:682
linuxlc 发布:2025-02-12 12:42:51 浏览:477
安卓协议一般支持哪个系统比较好 发布:2025-02-12 12:42:47 浏览:511
书脊算法 发布:2025-02-12 12:42:41 浏览:817
xp编程器功能介绍 发布:2025-02-12 12:37:00 浏览:973
海康威视监控密码是多少位 发布:2025-02-12 12:20:29 浏览:584
安卓的自带浏览器在哪里 发布:2025-02-12 12:20:29 浏览:722
望海潮上传 发布:2025-02-12 12:16:08 浏览:672
javathread源码 发布:2025-02-12 12:12:37 浏览:907