python 学习第十六天(类的常用内置方法)

类的常用内置方法

  • _ format _()
    格式化输出
class date:

    'hfgfghfgh'
    def __init__(self,y,m,d):
        self.y=y
        self.m=m
        self.d=d
    def __format__(self, format_spec):
        return '{0.y}{1}{0.m}{1}{0.d}'.format(self,format_spec)


d=date(2018,8,3)
print(format(d,'-'))
print(format(d,':'))

#输出
2018-8-3
2018:8:3
  • _ str _()
    把类转换成字符串
class dog:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __str__(self):
        return 'name:%s   age:%d'%(self.name,self.age)
d=dog('wawa',2)
print(str(d))#str(d)会调用__str__方法
print(d)# print会调用str()方法
#输出
name:wawa   age:2
name:wawa   age:2

  • _ getattr _()
    当调用不存在的属性时候,这个方法会执行。不重写,系统默认的会报错

    
    class dog:
        def __init__(self,name):
            self.name=name
        def __getattr__(self,item):
            print('------>getattr')
    
    d=dog('毛毛')
    d.ooooooo
    
    #输出
    
    ------>getattr
    
  • _ delatttr _ ()
    当删除属性的时候,会执行这个方法。不写也可以,系统由默认的
class dog:
    def __init__(self,name):
        self.name=name
    def __getattr__(self,item):
        print('------>getattr')
    def __delattr__(self, item):
        self.__dict__.pop(item)。      #__dict__是属性字典。这里不能这么写(del self.item),因为会进入无限递归
        print(item+'已删除')



a=dog('wawa')
delattr(a,'name')
a.name


#输出
name已删除
------>getattr
  • _ setattr_()
    设置(增加和修改)一个属性时会执行这个方法。不写也可以,系统由默认的
class dog:
    def __init__(self,name):
        self.name=name
    def __getattr__(self,item):
        print('------>getattr')
    def __delattr__(self, item):
        self.__dict__.pop(item)
        print(item+'已删除')
    def __setattr__(self, key, value):
        self.__dict__[key]=value  #同样,这里也不能写self.key=value
        print(key+'已设置')


a=dog('wawa')
delattr(a,'name')
a.name='haha'
print(a.name)


#输出
name已设置
name已删除
name已设置
haha
class Fib:
    def __init__(self,m):
        self.n=0
        self.a=1
        self.b=1
        self.m=m
    def __iter__(self):
        return self
    def __next__(self):
        if self.n==0:
            self.n+=1
            return self.a

        elif self.n>=self.m:
            raise StopIteration   #raise是主动抛出异常用的
        else:paoc
            self.a,self.b=self.b,self.a+self.b
            self.n+=1
            return self.a

f=Fib(4)
for i in f:
#for循环会先调用__iter__方法,再连续调用__next__方法,如果捕捉到StopIteration这个异常就会停止for循环
    print(i)


#输出
1
1
2
3

猜你喜欢

转载自blog.csdn.net/CZ505632696/article/details/81368414