python特殊函数 __len__(self):

__len__
如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数。

要让 len() 函数工作正常,类必须提供一个特殊方法__len__(),它返回元素的个数。

例如,我们写一个 Students 类,把名字传进去:

class Students(object):
    def __init__(self, *args):
        self.names = args
    def __len__(self):
        return len(self.names)
只要正确实现了__len__()方法,就可以用len()函数返回Students实例的“长度”:

>>> ss = Students(‘Bob‘, ‘Alice‘, ‘Tim‘)
>>> print len(ss)
3

任务
斐波那契数列是由 0, 1, 1, 2, 3, 5, 8...构成。

请编写一个Fib类,Fib(10)表示数列的前10个元素,print Fib(10) 可以打印出数列的前 10 个元素,len(Fib(10))可以正确返回数列的个数10。

?不会了怎么办
需要根据num计算出斐波那契数列的前N个元素。

参考代码:

class Fib(object):
    def __init__(self, num):
        a, b, L = 0, 1, []
        for n in range(num):
            L.append(a)
            a, b = b, a + b
        self.numbers = L

    def __str__(self):
        return str(self.numbers)

    __repr__ = __str__

    def __len__(self):
        return len(self.numbers)

f = Fib(10)
print f
print len(f)

list只能通过append 和 insert来插入元素!!!

时间: 2024-10-18 11:21:09

python特殊函数 __len__(self):的相关文章

python 的__len__,__getitem__ __setitem__ __delitem__ __contains__

可变集合需要实现: __len__  __getitem__    __setitem__  __delitem__不可变集合需要实现: __len__  __getitem__ __len__:返回集合长度 __getitem__(self, item) 使用索引访问元素 __setitem__(self, key, value) 对索引赋值,使用 self[key] = value . __delitem__(self, key) 删除索引值 del self[key]    __conta

python特殊函数 __call__()

__call__ 在Python中,函数其实是一个对象: >>> f = abs >>> f.__name__ 'abs' >>> f(-123) 123 由于 f 可以被调用,所以,f 被称为可调用对象. 所有的函数都是可调用对象. 一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__(). 我们把 Person 类变成一个可调用对象: class Person(object): def __init__(self, name,

python特殊函数 __cmp__

__cmp__ 对 int.str 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法 __cmp__(): class Student(object): def __init__(self, name, score): self.name = name self.score = score def __str__(self): return '(%s: %s)' % (self

python特殊函数之lambda和map

lambda表达式返回一个函数对象 map(function,sequence),把sequence中的值逐个传给function,返回一个包含函数执行结果的list 例子: squares = list(map(lambda x: x**2, range(10))) squares值是 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 相当于: squares = [x**2 for x in range(10)] 也相当于: >>> squares = []&

Python特殊函数

exec():执行动态的字符串代码,和eval类似,不过eval接受表达式. 它可接受:1.代码字符串 2.文件对象 3.代码对象 4.tuple >>> exec('a=2') >>> a 2 >>> exec('print(\'5\')') 5 eval():接受一个字符串对象,把字符串变成一个合法的表达式 >>> eval('1+1') 2 repr():接受一个表达式,把表达式变成字符串 >>> repr(1

python进阶五(定制类)【5-3python中__len__】

python中 __len__ 如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数. 要让 len() 函数工作正常,类必须提供一个特殊方法__len__(),它返回元素的个数. 例如,我们写一个 Students 类,把名字传进去: 1 class Students(object): 2 def __init__(self, *args): 3 self.names = args 4 def __len__(self): 5 return len(self.names

Python 定制类 特殊方法

1.特殊方法 定义在class中 不需要直接调用,python的某些函数或操作符会自动的调用对应的特殊方法. 如定义了person类,使用print p 语句打印person类的实例时,就调用了特殊方法__str__() 此时就需要在person类中实现这个方法. 使用特殊方法时注意: 只需要编写用到的特殊方法 有关联性的特殊方法都必须实现(如__getattr__,__setattr__,delattr__) 2.python中 __str__和__repr__ __str__()用于显示给用

Python学习之定制类

本文和大家分享的主要是 python开发中定制类的相关内容,一起来看看吧,希望对大家学习和使用这部分内容有所帮助. 1. python中什么是特殊方法 任何数据类型的实例都有一个特殊方法:  __str__() ·  用于 print 的  __str__ ·  用于 len 的  __len__ ·  用于 cmp 的  __cmp__ ·  特殊方法定义在 class 中 ·  不需要直接调用 · Python 的某些函数或操作符会调用对应的特殊方法 file:///C:\Users\wlc

Python基本数据类型(一)

目录: 1.运算符 2.type().dir().help()函数 3.基本数据类型常用功能之int.str操作. 正文: 一.运算符 算术运算:  比较运算: 赋值运算:  布尔操作符(逻辑运算):  成员运算: 二.type().dir().help()函数 1.type()函数用来判断数据类型 >>> type(123) <class 'int'> >>> type(123.0) <class 'float'> >>> t