美文网首页
python基础——属性访问

python基础——属性访问

作者: yangyangrenren | 来源:发表于2018-04-19 18:26 被阅读0次

    习惯了java的setter、getter,在python中,也这样写。

    class Tag(object):
        def __init__(self,**kwargs):
            if kwargs.has_key('title'):
                self.title = kwargs['title']
    
        def get_title(self):
            return self._id
    
        def set_title(self,title):
            self.title=title
    
    

    当属性多了之后,这样写,代码量很多。并且,在pycharm中,并没有找到像eclipse那样的自动生成getter、setter代码的快捷键,耗时长,并且代码长,不美观。改成下面这种形式,即可。

    class Tag(object):
        def __init__(self,**kwargs):
            for (key,value) in kwargs.iteritems():
                if key is not None and value is not None:
                    #setattr(key,value)
                    self.__setattr__(key,value)
    
        def __getattribute__(self, name):
            return super(Tag, self).__getattribute__(name)
    
        def __setattr__(self, name, value):
            super(Tag, self).__setattr__(name, value)
    
        def __getitem__(self, attr):
            return super(Tag, self).__getattribute__(attr)
    
    if __name__ == "__main__":
        tag = Tag(title='12344')
        print tag.title
        print tag['title']
        # error:对象,不能用in来判断是否包含属性
        #if 'title' in tag:
        #    print "in"
        #else:
        #    print "not in"
        if hasattr(tag, 'title'):
            print "has"
        else:
            print "not has"
    
        tag1=Tag1(title='4321')
        print tag1.title
        # error:对象,不能用in来判断是否包含属性
        #print tag1['title']
        #if 'title' in tag1:
        #    print "in"
        #else:
        #    print "not in"
        if hasattr(tag1, 'title'):
            print "has"
        else:
            print "not has"
    
        """
        # 将文件读取到list中
        file = "data/tag.json"
        list=None
        with open(file, 'r') as fb:
            list = json.load(fb)
        """
        json_str='[{"title": "t1"},{"title": "t2"}]'
        list = json.loads(json_str)
        for i, val in enumerate(list):
            if 'title' in val:
                print "in"
            else:
                print "not in"
    

    判断对象里是否包含属性,使用hasattr(object, 'property')进行判断。另外,由于python是弱类型,使用json加载到list之后,list里面的每一个元素就是dictionary的类型了,这时候,就使用in判断是否包含于keys里面,就不能使用hasattr(object, 'property')来判断。

    dict.get('property',value) 当dict中存在属性property,就取出其值;当不存在属性property,就是默认值“value”。
    对于object类型,只要定义中有了字段field,那么obj.field1就是取这个字段当值,当没有对此字段进行设值的话,那么就是默认值None

    相关文章

      网友评论

          本文标题:python基础——属性访问

          本文链接:https://www.haomeiwen.com/subject/vqgikftx.html