python定制程序_学习。。。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)

...

1

1

2

3

5

...

46368

75025

__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]进行处理  所以还得继续 。。。啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值