0

我正在用 python 学习 OOP。我想实现类似显示: firstNamelastName地址为字典之类的人,'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

我的代码是否有错误或访问字典的语法有误。我想不明白。

4

4 回答 4

2

在您使用的构造函数中:,这是不正确的,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")
于 2012-04-05T12:26:37.420 回答
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"))
于 2012-04-05T12:33:15.147 回答
0

你必须像这样使用它:

d = data("a", "b", state="stat", city="ci")

输入必须是名称,而不是字符串。因此,不可能输入类似city-zip. 因为它包含一个破折号(在 python 中是一个减号)。

于 2012-04-05T12:26:40.990 回答
0

你必须这样称呼它

d = data("a", "b", state="stat", city="ci")

也没有这样的变量,self.state或者self.city直到你分配它们。

例如。

self.state = address['state']
self.city = address['city']
于 2012-04-05T12:32:17.157 回答