zoukankan      html  css  js  c++  java
  • 面向对象中特殊的方法

    示例

    '''
    class Foo(object):
        def __init__(self):
            self.storage = {}
            #上面代码想在对象中设置一个storage = {},但是上面语法执行完之后还没有进行创建,因为它要执行__setattr__方法进行创建,
            #但执行上面代码会触发类中__setattr__方法调用self.storage,这时会报错,因为此时对象中没有storage属性,进入了一个死循环
    
        def __setattr__(self, key, value):
            print(self.storage)
    
    obj = Foo()
    obj.xx = 123  #直接调用父类object中的__setattr__方法
    '''
    '''
        AttributeError: 'Foo' object has no attribute 'storage'
    '''
    
    ###############################解决方式如下###################################
    
    class Foo(object):
        def __init__(self):
            self.storage = {}
            object.__setattr__(self,'storage',{})  #执行obj = Foo()会触发__init__方法,走到这一句代码后调用父类__setattr__方法,
            # 即在父类object设置了storage = {}
    
        def __setattr__(self, key, value):
            print(key,value)
    
    obj = Foo()  #这一句执行完后打印结果 storage {}
    obj.xx = 123 #执行到这一句时会触发Foo类中的__setattr__方法  xx 123
    
    
    '''
        storage {}
        xx 123
    '''
  • 相关阅读:
    UINavigationBar 调整
    UILabel根据内容自动调整高度
    [iOS开发]文档导读
    [iOS开发]NSUserDefaults使用注意
    Xcode 断点的使用
    [iOS开发] UIKit Dynamics
    [iOS开发]ShareSDK
    objective-c GCD
    面向对象设计原则
    Go语言学习教程:go语言的包管理
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/13233806.html
Copyright © 2011-2022 走看看