学习。。。python定制方法

来源:互联网 发布:现货倚天屠龙指标源码 编辑:程序博客网 时间:2024/05/29 08:30
<pre name="code" class="python">
class Chain(object): def __init__(self,path=''): self._path = path def __getattr__(self,path): return Chain('%s/%s' % (self._path, path)) def __call__(self,path): return Chain('%s/%s' % (self._path, path)) def __str__(self): return self._path __repr__ = __str__ print(Chain().status.user.timeline.list)print(Chain().status.user('kopite').timeline.list)


__getattr__  找不到相对于的属性时调用

如:

s = Chain()print(s.name)
输出--->/name

__call__       本身也可以作为函数 

如:

s = Chinai()print(s.uers('kopite'))
-->/users/kopite

__str__         print中直接打印

__repr__       直接打印

Chain().user.bin
-->/user/bin


__iter__

如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。

class Fib(object):    def __init__(self):        self.a, self.b = 0, 1 # 初始化两个计数器a,b    def __iter__(self):        return self # 实例本身就是迭代对象,故返回自己    def __next__(self):        self.a, self.b = self.b, self.a + self.b # 计算下一个值        if self.a > 100000: # 退出循环的条件            raise StopIteration();        return self.a # 返回下一个值

>>> for n in Fib():...     print(n)...11235...4636875025

__getitem__

定制该方法便可使用[]访问
class Fib(object):    def __getitem__(self, n):        if isinstance(n, int): # n是索引            a, b = 1, 1            for x in range(n):                a, b = b, a + b            return a        if isinstance(n, slice): # n是切片            start = n.start            stop = n.stop            if start is None:                start = 0            a, b = 1, 1            L = []            for x in range(stop):                if x >= start:                    L.append(a)                a, b = b, a + b            return L


>>> f = Fib()>>> f[0]1>>> f[1]1
>>> f[0:5][1, 1, 2, 3, 5]

可实现[]访问 切片也可以

但没有对f[::2]进行处理  所以还得继续 。。。啊




0 0
原创粉丝点击