![](/img/trans.png)
[英]How do I dynamically create instances of all classes in a directory with python?
[英]How do I create dynamically, and manage, new instances of common data types in Python?
我想制作一個程序,向用戶詢問一個數字(比方說3),並創建3個3x3列表,或3組3個成員或3個Python已經知道的其他復雜數據類型。
許多程序在沒有嚴格編程實例聲明的情況下創建新對象。 例如,在Cinema4D(3D圖形軟件)中,我可以按一個按鈕並創建任意數量的多維數據集。 但是,如果沒有如下所示的書面代碼聲明,我不知道這種自動實例創建的編程機制:
cubeobj cube_1
cube_1.name("Cube.1") ...
在C ++中,類似這樣的操作需要new
運算符和malloc()
函數。 Python中有與它們等效的功能嗎?
我在許多Python書籍中進行了搜索,但沒有找到任何東西,什么樣的Python主題會討論類似的內容?
嘗試這個:
num = input()
lst = [[0 for __ in range(num)] for _ in range(num)]
對於特定類型,您應該使用numpy數組或array
模塊
如果您需要三重嵌套列表,則可以這樣創建它:
In [1]: num = 3
In [2]: [[[[0 for __ in range(num)] for _ in range(num)]] for ___ in range(num)]
Out[2]:
[[[[0, 0, 0], [0, 0, 0], [0, 0, 0]]],
[[[0, 0, 0], [0, 0, 0], [0, 0, 0]]],
[[[0, 0, 0], [0, 0, 0], [0, 0, 0]]]]
但是,使用numpy
可能更容易管理多維數組:
In [3]: import numpy as np
In [4]: np.zeros((num, num, num))
Out[4]:
array([[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]]])
但總的來說,您的問題的答案是,您可以通過調用相應的構造函數並通過列表,字典或其他方式使返回的實例保持可訪問性,來創建任意數量的對象。
使用一個假設的多維數據集示例,您可以創建num
Cube
對象並將它們全部放入列表中:
num = int(input())
cubes = [Cube(name="Cube " + str(i)) for i in range(num)]
好的,我想我已經提出了一個解決方案。 與其嘗試尋找一種創建新列表的方法,不如將我需要的新索引附加到預定義的空列表上,並使用與我的輸入數字相關的for
循環和取模,將該線性列表與不相關的列表一樣對待。
我仍然不知道用於自動類實例化的通用編程方法,但是...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.