用类访问字典

时间:2012-04-05 12:22:46

标签: python

我正在使用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 个答案:

答案 0 :(得分:2)

在你的构造函数中,你使用的是: incorect,kwargs应该是name = val。另外,您不能self.stateself.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.stateself.city这样的变量。

例如。

self.state = address['state']
self.city = address['city']