python - 使用数组数据初始化 Python 类

标签 python oop python-3.x

假设我有以下代码:

class Person(object):
""" Capture user demographics data"""

def __init__(self, name, address, phone, gender, name_prefix):
    """ Initialize the object """
    self.name = name
    self.address = address
    self.phone = phone
    self.gender = gender
    self.prefix = name_prefix


def display_userdata(self):
    """ Returns user data"""
    userdata = {'name':self.name, 'address': self.address, 
                'phone': self.phone, 'gender': self.gender, 'prefix': self.prefix
               }
    return userdata

我可以初始化数据:

newperson = Person("Ben", '9999 Gotham City, las vegas', '702-000-0000', 'male', 'Waiter')

但我有一种感觉,如果我可以重写 __init 以存储为 dict,则 display_userdata() 函数是多余的。

newperson.display_userdata()

它返回输出:

{'address': '9999 Gotham City, las vegas',
 'gender': 'male',
 'name': 'Ben',
 'phone': '702-000-0000',
 'prefix': 'Waiter'}

我的问题是:

有没有更聪明的方法来编写 __init__ 片段,以便将输入直接存储为 python 字典?我不想使用 setattr 调用带有字典键的构造函数。

其次,假设用户有 3 个或更多电话(可变),我如何在调用对象构造函数时将其存储在数组中。想想 self.phone = ['702-000-000', '413-222-3333' ]

最佳答案

为什么不直接在 init 中创建字典?

class Person(object):
""" Capture user demographics data"""

    def __init__(self, name, address, phone, gender, prefix):
        """ Initialize the object """
        self.userdata = {'name': name, 'address': address, 
                'phone': phone, 'gender': gender, 'prefix': prefix
               }

然后

newperson = Person(name="Ben", address='9999 Gotham City, las vegas', phone='702-000-0000', gender ='male', prefix ='Waiter')
print newperson.userdata

返回

{'phone': '702-000-0000', 'gender': 'male', 'prefix': 'Waiter', 'name': 'Ben', 'address': '9999 Gotham City, las vegas'}

关于你的第二个问题,如果你将一个列表而不是一个字符串传递给将显示为列表的电话参数,这行得通吗?

newperson = Person(name="Ben", address='9999 Gotham City, las vegas', phone=['702-000-0000', '111-827-3509'], gender ='male', prefix ='Waiter')
print newperson.userdata

返回

{'phone': ['702-000-0000', '111-827-3509'], 'gender': 'male', 'prefix': 'Waiter', 'name': 'Ben', 'address': '9999 Gotham City, las vegas'}

关于python - 使用数组数据初始化 Python 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396268/

相关文章:

python - 如何定义关系 N :N in python3+django2?

Python ducktyping 感觉笨拙这是 Pythonic 吗?

python - 是否有可以呈现 numpy 数组数据的 python plotly/dash 图像小部件?

python - 获取每个 parent 的最大值的 child

JavaScript OOP 私有(private)变量

javascript - 在 JavaScript 的事件回调中检索对象的最佳方法是什么

python - 在一行中打印 f 个列表项

python - PySpark 中可变列数的总和

java - 使用单一方法的 OO 解决方案

python-3.x - 没有名为 airfow.gcp 的模块 - 如何运行使用 python3/beam 2.15 的数据流作业?