[英]How to create objects with array-properties in Python
我正在尋找一種方法來在Python中將對象實現為具有不同屬性的數組。 我的想法是看起來像這樣的對象索引:
self[row][col].item1 = True
self[row][col2].item2="xkcd"
...
我敢肯定,我以前見過這個,但是我無法重新創建一個允許這樣做的類。 到目前為止,我最好的電話是(用偽代碼):
def __init__(self, posxy=[[...]*10]):
self.posxy=posxy
至少可以讓我為posxy屬性提供我想要的所有信息。 但是,我強烈希望第一個變體。 有人在面向對象編程方面有更多經驗可以幫助我嗎?
您想查看Python數據模型的“ 模擬容器類型”部分。
最起碼,你就必須實現__getitem__
掛鈎 ,讓你的類手柄[...]
索引。 這將僅傳遞第一 row
值,無論此方法返回的內容如何,都將被索引為[col]
。
您可以選擇處理元組,也可以在self[row, col]
上建立索引,然后將為key
參數傳遞包含兩個值的元組:
def __getitem__(self, key):
row, col = key # unpack the tuple
return self.matrix[row][col]
要使用[]
表示法,您需要覆蓋__getitem__
特殊方法。 一個簡單的例子:
class X:
def __init__(self, data):
self.data = data
def __getitem__(self, index):
return self.data[index]
因此,要獲得行和列,可以嘗試以下操作:
class Row:
def __init__(self, data):
self.data = data
def __getitem__(self, index):
return self.data[index]
class Matrix:
def __init__(self, data):
self.data = [Row(d) for d in data]
def __getitem__(self, index):
return self.data[index]
簡單的演示:
class X:
def __init__(self, value):
self.item1 = value
x = Matrix([[X('11'), X('12'), X('13')], [X('21'), X('22'), X('23')]])
print x[1][1].item1
得到:
>>>22
您可以從defaultdict繼承以獲取如下內容:
import collections
class MyClass(collections.defaultdict):
def __init__(self):
collections.defaultdict.__init__(self, dict)
self[0][0] = True
self[0][1] ="xkcd"
即,每個頂級索引都會產生一個dict
。 如果您想要更結構化的內容,則defaultdict需要一個不同的工廠函數...也許它會產生一個MyInnerClass,它也是一個defaultdict,包含最終類型。
所有defaultdict為您所做的都是實現__getitem__
__setitem__
, __contains__
__getitem__
, __setitem__
__contains__
等。如果要手動實現,請參見Martijn的鏈接以獲取完整的方法列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.