Python 使用用户输入创建继承的类
我正在尝试编写一个产品清单项目。我偶然发现了这个问题,几天来一直在搜索,但找不到任何方法来解决它。如何使用用户输入创建从基类继承的类 下面是基类:Python 使用用户输入创建继承的类,python,python-3.x,oop,Python,Python 3.x,Oop,我正在尝试编写一个产品清单项目。我偶然发现了这个问题,几天来一直在搜索,但找不到任何方法来解决它。如何使用用户输入创建从基类继承的类 下面是基类: class Product: def __init__(self, title, color, price): self.title = title self.color = color self.price = price 我试图实现的是,用户将能够自己添加产品,比如说,按2将要求他输入产品
class Product:
def __init__(self, title, color, price):
self.title = title
self.color = color
self.price = price
我试图实现的是,用户将能够自己添加产品,比如说,按2将要求他输入产品类型(coat),而不是特定于产品的参数,这将创建一个从基类继承的新类。像这样:
class coats(Product):
def __init__(self, material, size):
self.material = material
self.size = size
我可以使用用户输入创建实例,但创建继承类时我无法理解。如果你能帮忙,我将不胜感激。谢谢。虽然您可以使用动态生成类,但您确实不想在这里这样做。为用户生成的数据建模的代码生成只会导致非常非常难以管理动态查找属性和变量名的代码 在现有类中使用数据结构来存储用户生成的数据。你只需要一本字典:
class Product:
def __init__(self, type, price, properties):
self.type = type
self.price = price
self.properties = properties
然后要创建涂层
产品使用:
products = {}
products['coat'] = Product('coat', 10.0, {'color': 'some color', 'material': 'some material', size: 12})
其中,产品
中的各种值和键不是文字,而是用户输入的变量
类为应用程序建模,并包含数据。不要为数据创建单独的模型。虽然可以使用动态生成类,但您确实不希望在这里这样做。为用户生成的数据建模的代码生成只会导致非常非常难以管理动态查找属性和变量名的代码 在现有类中使用数据结构来存储用户生成的数据。你只需要一本字典:
class Product:
def __init__(self, type, price, properties):
self.type = type
self.price = price
self.properties = properties
然后要创建涂层
产品使用:
products = {}
products['coat'] = Product('coat', 10.0, {'color': 'some color', 'material': 'some material', size: 12})
其中,产品
中的各种值和键不是文字,而是用户输入的变量
类为应用程序建模,并包含数据。不要为数据创建单独的模型。为什么需要生成新类?只需将用户选择的参数存储在字典中。您尝试了什么?有没有一种方法可以告诉父类子类的属性应该是什么?(有……)既然
coats
是产品
,它应该把标题、颜色、价格
作为参数,并将这些参数传递给产品。函数中的
函数中的中的super()
,这似乎是你想要的。你为什么需要生成新的类?只需将用户选择的参数存储在字典中。您尝试了什么?有没有一种方法可以告诉父类子类的属性应该是什么?(有……)既然coats
是产品
,它应该把标题、颜色、价格
作为参数,并将这些参数传递给产品。函数中的
函数中的中的super()。我认为代码在products中创建了一个字典,然后可以像打印(products['coat']['color']
那样打印它,但是没有,它将参数加载到类中的属性中,然后我可以使用打印(products['coat'].properties['color']我甚至不知道这是可能的……非常感谢。说到我最初的问题,我想正如内森·麦考伊所建议的,超级()这是一条路。你有没有可能解释一下,仅仅为了这些信息,你是如何做到的?@Seferi:那条评论假设你实际上是在直接创建子类,而不是生成它们。有关如何super()的帖子,请参阅
可以用在\uuuuu init\uuuuu
方法中,让基类处理一些配置。感谢mate的回答,我花了一段时间才理解。我认为代码在产品中创建了一个字典,然后我可以像打印(产品['coat']['color']那样打印它
但是没有,它将参数加载到类中的属性中,然后我可以使用打印(产品['coat'].properties['color']]
打印这些参数。我甚至不知道这是可能的……非常感谢。当涉及到我最初的问题时,我想正如Nathan McCoy所建议的,super()就是这样。你有没有可能解释一下,仅仅为了获取信息,你是如何做到的?@Seferi:这个评论假设你实际上是在直接创建子类,而不是生成它们。有关如何在\uuu init\uu
方法中使用super()
来让基类处理某些配置的帖子,请参阅。