使用用户输入创建对象的最 Pythonic 方式

The most Pythonic way to create an object with user inputs

我想知道创建参数来自用户输入的对象的最 Pythonic 方法是什么。考虑这个例子:

class SomeClass:
    def __init__(self, a, b, c):
        self.x= a
        self.y= b
        self.z= c

我是否应该在其他地方(在另一个模块中?)要求用户输入 a、b、c 的值的函数?或者,我是否应该将 x、y、z 设置为 None,然后从 init 函数调用提示用户设置参数值的辅助函数?最 Pythonic 的方法是什么?我已经与 Python 合作了几年,但我(终于)开始优先考虑样式和代码美学。

感谢您的帮助。

There are cases when we need to get user input in a python program then use it during the initialization of a class. For example, if we have a class ‘person’ that has two attributes first name and last name.

class Person:
     """
     A representation of a person 
     Attributes:
         Firstname(string)
         Lastname(String)
     """
     def __init__(self, first_name, last_name):
         self.firstname = first_name
         self.lastname = last_name 
     def show_full_name(self):
         return self.firstname + ' ' + self.lastname

To create a person object using this class, we could supply arguments directly without requiring user input. See below.

#instance by supplying arguments
person1 = Person('John', 'Doe')
person1.show_full_name()

你可以用这个语句结束它

class SomeClass:
    def __init__(self, a, b, c):
        self.x= a
        self.y= b
        self.z= c
       
       
if __name__ == "__main__":
    a = input("Enter a: ")
    b = input("Enter b: ")
    c = input("Enter c: ")
    some_class = SomeClass( a , b, c )

除了 pythonic 编码方式之外,您还需要询问编码的一般原则。通常,您的程序中永远不会只有一个 class,除非您在只有一个源 (.py) 文件的情况下使用 python 编写脚本。您的程序中也有 user-input。您应该始终将数据和 UI 分开。因此,将 class 用于数据,将 UI 分开。 UI class 还可以在使用输入创建数据对象之前验证输入。

也许最 pythonic 的方法是使用 collections.namedtuple

import collections

a = input("Enter a: ")
b = input("Enter b: ")
c = input("Enter c: ")

obj = collections.namedtuple('Class', [a, b, c])

# Set value to each parameter
obj.a = 10
obj.b = 'Ghanteyyy'
obj.c = True