python类方法


#-*- coding:utf8 -*-
from types import MethodType

class MyClaxx(object):
    
    def __init__(self,name,age):
        self.name=name
        self.age=age 
        
    def getInfo(self):
        return self.age,self.name 



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

    def __iter__(self):
        return self
    
    def next(self):
        if self.age>200:#大于200时抛出StopIteration停止循环
            raise StopIteration()
        self.age=self.age+1
        return self.age
    
    
#     下面的操作用于下标访问
    def __getitem__(self,n):
        if isinstance(n, slice):#切片处理
            start = n.start
            stop = n.stop
            step=n.step
            return start,step,stop
        return n #下标处理
    
    
#     当调用不存在的属性时,比如score,Python解释器会试图调用__getattr__(self, attr)
# 来尝试获得属性,这样,我们就有机会返回score的值:
    def __getattr__(self,attr):
        if attr=='score':
            return 60
        if attr=='sex':
            return 'M'
#        建议为其他属性抛出异常 raise AttributeError('xxx')
        return '属性缺失'
        
        
    def __call__(self,*arg):
        return 'call '+self.name+str(self.age)+str(arg)
    
    
m= MyClaxx('Tom',15)

print m

for ele in m:
    print ele
# 16
# 17
# 18
# 19
# 20
# ... 
# 198
# 199
# 200
# 201

print m[5]
# 5
print m[:100]
# (None, None, 100)
print m[10:20]
# (10, None, 20)
print m[5,10,2]
# (5, 10, 2)


print m.score
# 60
print m.sex
# M
print m.weight
# 属性缺失

print m()#会调用__call__方法
# call Tom201()

print m(['a','b','3'])
# call Tom201(['a', 'b', '3'],)


# 判断一个对象是否是函数可以使用callable
print callable(m)
# True

print callable([1,2,3])
# False









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值