2016-11-13 3 views
2

Ich habe Code wieAlternative zu Klassenobjekten in Python

class abc: 
    def __init__(self): 
     self.a = 0 
     self.b = 0 
     self.c = 0 

I Array von Objekten dieser Klasse wie unten mache:

objs = np.array([ abc() for x in range(10)]) 

Gibt es eine Datenstruktur ähnlich wie Klassen, die halten kann Werte a, b, c wie in der Klasse abc. Auch könnte ich Array dieser Datenstruktur wie oben in objs Objekt gemacht machen. Bitte, wenn jemand führen könnte.

+0

Warum wollen Sie nicht eine Klasse benutzen? –

+0

Ich bin nicht ganz sicher, was Sie fragen. Was ist los mit der 'Klasse'? Vielleicht kann 'collections.namedtuple' helfen, schwer zu sagen. – AChampion

+0

Wie auch immer, eine Klasse ist nicht wirklich eine Datenstruktur, sondern ein Programmierkonstrukt, mit dem konkrete Datenstrukturen implementiert werden können. –

Antwort

3

Wenn Sie mit Python 3.3+, können Sie types.SimpleNamespace verwenden:

>>> import types 
>>> types.SimpleNamespace(a=0, b=0, c=0) 
namespace(a=0, b=0, c=0) 

>>> obj = types.SimpleNamespace(a=0, b=0, c=0) 
>>> obj.a 
0 
>>> obj.b 
0 
>>> obj.c 
0 

In älteren Version verwenden collections.namedtuple um einen benutzerdefinierten Typ zu machen.

>>> from collections import namedtuple 
>>> 
>>> abc = namedtuple('abc', 'a b c') 
>>> abc(a=0, b=0, c=0) 
abc(a=0, b=0, c=0) 

Aber es erlaubt keine Attribut Einstellung im Gegensatz zu types.SimpleNamespace:

>>> obj = abc(a=0, b=0, c=0) 
>>> obj.a 
0 
>>> obj.a = 1 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: can't set attribute 
+0

Aber ich habe Version 2.7.11. Gibt es für diese Version von Python Alternativen zu Klassen? – Arshad

+0

@ user271017, habe ich die Antwort auf eine Alternative mit einer Notiz aktualisiert. – falsetru