【问题标题】:How do I create instances in class using user's input?如何使用用户的输入在课堂上创建实例?
【发布时间】:2018-10-03 01:31:19
【问题描述】:

我正在尝试根据用户的输入在一个类中创建任意数量的实例,但到目前为止我无法:

class CLASS_INVENTORY:
    maxcount_inventory = int(input("How many Inventories: "))
    for count_inventory in range(maxcount_inventory): 
        def __init__(Function_Inventory, inventory_name(count_inventory)):
            add_inventory = str(input("Enter Inventory #%d: " % (count_inventory+1)))
            inventory_name[count_inventory] = add_inventory   

注意:我是 Python 3 的新手,所以我不确定我的某些语法是否正确。

我希望输出是这样的:

How many Inventories: 4
Enter Inventory #1: Fruits
Enter Inventory #2: Veggies
Enter Inventory #3: Drinks
Enter Inventory #4: Desserts

这是我的完整代码: https://pastebin.com/3FBHgP6i 我也想知道编写 Python 3 代码的规则,如果我正确地遵循它们或者我应该改变一些东西。我希望它对其他 Python 程序员尽可能可读。

【问题讨论】:

  • Stepanjan 的回答对于动态大小的数组问题是准确的,但是在 Python3 代码规则方面,建议将类声明为:class ClassName(object):,其中 object 是ClassName 子类或实现的类型(在大多数情况下,实际上可能是 object)。一般来说,也建议关注PEP8 guidance。如果您使用支持 PEP8 的文本编辑器或 IDE(例如,带有一些社区插件和 pip 包的 Atom),则最容易遵循这一点。
  • 我应该在这里使用一个对象吗?如果我要添加一个对象,请问您对我应该如何命名我的对象的意见?
  • 国际海事组织,没有。如果 pastebin 是您的完整代码,那么数组对于您的用例来说完全足够了。更多“OOP-everywhere” 社区成员可能不同意,因为类使您能够在以后扩展和添加数据/字段(例如,也许您将添加一个“描述”成员来描述存储在库存中的内容类型),但就目前而言,在我看来,把它放在一个类中是过分的。
  • 我明白了。感谢您的信息。

标签: python python-3.x function class user-input


【解决方案1】:
class CLASS_INVENTORY():
    maxcount_inventory = int(input("How many Inventories: "))
    inventory=[]
    def __init__(self):
        for count_inventory in range(0, self.maxcount_inventory):
            add_inventory = str(input("Enter Inventory #%d: " % (count_inventory+1)))
            self.inventory.append(add_inventory) 

【讨论】:

  • 如果您对您所做的不同之处进行简短描述,您的答案会更好。否则,读者必须逐行逐字符地将您的代码与原始代码进行比较。
  • 我想补充一点,我需要整理好我的库存。字典和设置不是随机的(不按顺序)吗?
  • @Geni-sama,一个数组,这是 Stepanjan 建议的,是根据用户输入项目的顺序排序的。
【解决方案2】:

我会这样做:

# Define class
class CLASS_INVENTORY():
   # On making a class object init will be called
   def __init__(self):
       # It will ask for the inventory type count
       self.maxcount_inventory = int(input("How many Inventories: "))
       self.inventory = []
       # Just loop around it to get the desired result
       for count_inventory in range(0, self.maxcount_inventory):
           add_inventory = str(input("Enter Inventory #%d: " % (count_inventory+1)))
           self.inventory.append(add_inventory)

输出:

CLASS_INVENTORY()
How many Inventories: >? 2
Enter Inventory #1: >? Apple
Enter Inventory #2: >? Orange

【讨论】:

  • 添加的实例是否有序?不是字典,在添加值时都设置随机(不按顺序)?
  • 因此我使用了列表,它将按顺序附加。但是如果你使用字典或设置它会是随机的。
【解决方案3】:

您可以在def _init__(self) 中构造您的字典,然后设置一个单独的方法print_inventories 与print 循环,同时保持输入顺序

class Inventory():
    def __init__(self):
        self.inventories = {}
        n = int(input('How many inventories: '))
        for i in range(1, n+1):
            self.inventories[i] = input('Enter inventory #{}: '.format(i))

    def print_inventories(self):
        for k in self.inventories:
            print('#{}: {}'.format(k, self.inventories[k]))

a = Inventory()
a.print_inventories()
How many inventories: 4
Enter inventory #1: Fruits
Enter inventory #2: Veggies
Enter inventory #3: Drinks
Enter inventory #4: Desserts
#1: Fruits
#2: Veggies
#3: Drinks
#4: Desserts

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2020-11-30
    相关资源
    最近更新 更多