我得到一个词典来启动一个班主任。有一个人在场:'名字'。 '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'
答案 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
,或者您可以提供具有不同默认值的第二个参数。