python:实例属性错误

时间:2012-04-18 13:51:20

标签: python

我得到一个词典来启动一个班主任。有一个人在场:'名字'。 'name'字段是可选的,这意味着如果dict没有'name'项,那么person没有'name'值。我使用getter方法来获取实例属性,但是如果没有'name'值则会抛出错误。我不知道有什么好的编程风格来改进我的代码吗?因为python在运行时创建实例字段,所以我不知道如何使用像java这样的getter。

class Person:
    def __init__(self,person_dict):
        try:
            self.name = person_dict['name']
        except Exception:
            pass

    def getName(self):
        return self.name

pdict = {}
p = Person(pdict)
print p.getName()

AttributeError:Person实例没有属性'name'

3 个答案:

答案 0 :(得分:6)

class Person:

    def __init__(self,person_dict):
        self.name = person_dict.get('name')

在这种情况下,self.name = person_dict.get('name')不会引发异常,而Person对象将具有name属性(默认为None

UPD。由于getName方法没用,我将其从示例中删除。直接访问name attr。

答案 1 :(得分:3)

class Person:
    def __init__(self,person_dict):
        self.name = person_dict.get('name', 'default_name')

pdict = {}
p = Person(pdict)
print p.name  # there is no need for getter

答案 2 :(得分:0)

如果您不想要例外,则应确保该实例具有name的值。如果在实例上找不到属性,查找将回退到类,一个简单的方法是简单地将name = None(或您希望实例使用的任何默认值)添加到类定义中。对实例上属性的赋值将“隐藏”默认值。

class Person:
    name = None
    def __init__(self,person_dict):
        try:
            self.name = person_dict['name']
        except Exception:
            pass

你可以这样写__init__

def __init__(self,person_dict):
    self.name = person_dict.get('name')

如果找不到密钥,get()字典方法会返回None,或者您可以提供具有不同默认值的第二个参数。