• day27面向对象(四)


    '''
    
    授权  授权是包装的一个特性,包装一个类型通常是对已经存在的类型的一些定制,这种做法可以新建
    修改或删除原有产品的功能,其他的则保持原样 授权的过程,及时所有更新的功能都是由新类的某部分来
    处理,但已存在的功能就授权给对象的默认属性
    __getattr__
    '''
    

      

    class  Open:
        def __init__(self,filename,mode='r',encoding='utf-8'):
            # self.filename = filename
            self.file=open(filename,mode,encoding=encoding)
            self.mode=mode
            self.encoding=encoding
    
        def write(self,line):
            print('------------->',line)
            self.file.write(line)
    
        def __getattr__(self, item):
            return getattr(self.file,item)
    
    f1 = Open('a.txt','r+')
    print(f1.read())
    f1.write('333333333333
    ')
    

      

    迭代器

    '''
    迭代器
    '''
    class Foo:
        def __init__(self,n):
            self.n = n
    
        def __iter__(self):
            return  self
    
        def __next__(self):
            if self.n == 0:
                raise StopIteration('ERROR')
            self.n -= 1
            return self.n
    
    f1 = Foo(10)
    
    for i in f1:
        print(i)
    

      

    '''
    迭代器斐波那契
    '''
    class Foo:
    
        def __init__(self):
            self.a = 1
            self.b = 1
    
        def __iter__(self):
            return  self
    
        def __next__(self):
            if self.a >30:
                raise  StopIteration('error')
            self.a,self.b = self.b,self.a +self.b
            return self.a
    
    l = Foo()
    for i in l:
        print(i)
    

      

    def test():
        a = 1
        b = 1
        for i in range(10):
            a,b = b, b+a
            print(a)
    
    test()
    

      

    '''
    doc
    '''
    class Foo:
        '我是描述信息'
        pass
    
    class Bar(Foo):
        pass
    print(Bar.__doc__) #该属性无法继承给子类
    

      

    '''
    call
    '''
    
    class Foo:
        def __call__(self, *args, **kwargs):
            print('实例执行啦 call')
    
    f1=Foo()
    f1() #实例执行啦 call 
    #f1的类Foo 下的__call__
    

      

    @property   @x.setter @x.deleter

    class Foo:
        def __init__(self,val):
            self.__NAME=val #将所有的数据属性都隐藏起来
    
        @property
        def name(self):
            return self.__NAME #obj.name访问的是self.__NAME(这也是真实值的存放位置)
    
        @name.setter
        def name(self,value):
            if not isinstance(value,str):  #在设定值之前进行类型检查
                raise TypeError('%s must be str' %value)
            self.__NAME=value #通过类型检查后,将值value存放到真实的位置self.__NAME
    
        @name.deleter
        def name(self):
            #raise TypeError('Can not delete')
            del self.__NAME
    
    f=Foo('egon')
    print(f.name)
    

      

  • 相关阅读:
    微信WeixinJSBridge API
    微信内置浏览器的JsAPI(WeixinJSBridge续)[转载]
    一套简单可依赖的Javascript库
    一款轻量级移动web开发框架
    传说中的WeixinJSBridge和微信rest接口
    点击网页分享按钮,触发微信分享功能
    Metronic前端模板
    AdminLTE前端模板
    Nginx如何配置静态文件直接访问
    架构设计流程
  • 原文地址:https://www.cnblogs.com/augustyang/p/9110482.html
Copyright © 2020-2023  润新知