我正在使用python学习OOP。
我想实现类似显示的东西:
地址为字典的人firstName
,lastName
,'state': someState, 'city': someCity
我做完了:
class data:
def __init__(self, firstName, lastName, **address):
self.firstName = firstName
self.lastName = lastName
self.address = {
"state": self.state,
"city" : self.city
}
当我这样做时:
>>> d = data("a", "b", 'state' : "stat", 'city' : "ci")
SyntaxError: invalid syntax
>>> d = data("a", "b", 'state'="stat", 'city'="ci")
SyntaxError: keyword can't be an expression
我的代码是否有错误或访问字典的语法是错误的。我无法理解。
答案 0 :(得分:2)
在你的构造函数中,你使用的是:
incorect,kwargs应该是name = val。另外,您不能self.state
或self.city
,因为您还没有设置它们。你需要去kwargs字典并将它们拉出来。你想做什么**地址?
class data:
def __init__(self, firstName, lastName, **address):
self.firstName = firstName
self.lastName = lastName
self.address = {
"state": address.get('state', ''),
"city" : address.get('city', ''),
}
没有理由以你指定的方式做地址......我建议把州/城作为明确的kwargs。
class data:
def __init__(self, firstName, lastName, state='', city=''):
self.firstName = firstName
self.lastName = lastName
self.address = {
"state": state,
"city" : city,
}
d = data("a", "b", state="stat", city="ci")
答案 1 :(得分:2)
您应该只定义一个新的dict作为构造函数的参数,然后将其复制到构造函数中。
class Data:
def __init__(self, firstName, lastName, address):
self.firstName = firstName
self.lastName = lastName
self.address = dict(address)
data = Data("first", "last", dict(state="pa", city="pittsburgh"))
答案 2 :(得分:0)
你必须像这样使用它:
d = data("a", "b", state="stat", city="ci")
输入必须是名称,而不是字符串。因此,输入city-zip
之类的东西是不可能的。因为它包含一个破折号(在python中是一个减号)。
答案 3 :(得分:0)
你必须像这样称呼它
d = data("a", "b", state="stat", city="ci")
在分配之前,不存在self.state
或self.city
这样的变量。
例如。
self.state = address['state']
self.city = address['city']