美文网首页
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