Seite 1 von 1

Einem Add Objekt Attribute geben

Verfasst: Freitag 20. September 2013, 09:43
von Nergal53
Hallo,
ist es möglich einem Objekt vom Typ Add neue Attribute zu geben, wie es zum Beispiel bei einem Piecewiseobjekt möglich ist?
Oder ist es andernfalls möglich ein Addobjekt in ein sympy Piecewise zu konvertieren?

Code: Alles auswählen

tmp_fnc.fname = fdgen.next()
tmp_fnc.tp_list = tpList
tmp_fnc ist ein Piecwise Objekt und fname und tp_list sind die neuen Attribute die ich hinzufügen möchte.
An einer Anderen Stelle ist tmp_fnc aber vom Typ Add.
Danke im Voraus.

Re: Einem Add Objekt Atriubute geben

Verfasst: Freitag 20. September 2013, 10:08
von BlackJack
@Nergal53: Und das Problem liegt jetzt genau wo? Fehlermeldung? Wenn ja welche!? Anderes Ergebnis als Du erwartest? Was erwartest Du? Was bekommst Du stattdessen? Vielleicht ein minimales, lauffähiges Beispiel, welches das Problem nachvollziehbar macht!?

Re: Einem Add Objekt Atriubute geben

Verfasst: Freitag 20. September 2013, 10:24
von Nergal53
Entschuldigung für die ungenaue Darlegung meines Problems, es ist halt nicht leicht anderen zu erklären was nicht funktioniert, wenn man den ganzen Tag in seinem Programm lebt :oops:

Wenn ich einem Objekt ein neues Attribut geben möchte erhalte ich die Fehlermeldung:
AttributeError: 'Add' object has no attribute 'fname'
mein Vorgehen ist analog dem im Post #1 nur das tmp_fnc nun ein Objekt vom Typ Add ist und nicht vom Typ Piecewise.

Re: Einem Add Objekt Atriubute geben

Verfasst: Freitag 20. September 2013, 10:47
von Hyperion
Geht doch:

Code: Alles auswählen

class Add:
    pass

a = Add()

a.fname = "foo"

a.fname
> 'foo'
:twisted:

@Nergal53: Hast Du BJs Posting überhaupt richtig gelesen? :K

Re: Einem Add Objekt Atriubute geben

Verfasst: Freitag 20. September 2013, 11:05
von Nergal53
Ja ich habe seinen Beitrag richtig gelesen.
Dann probiere ich es halt nochmal...
Ich arbeite hauptsächlich mit sympy. Ich errechne mir eine Piecewisefunction diese ist vom Typ Piecewise. In einem nächsten Schritt multipliziere ich diese Piecewisefunction mit einer Integer Zahl und addiere andere Piecwiesefunction hinzu
<class 'sympy.core.add.Add'>
und diesem Objekt lässt sich mittels .fname kein neues Attribut hinzufügen.
Ich benötige dieses Attribut aber später

wenn ich versuche das Attribut hinzuzufügen

Code: Alles auswählen

u.fname = "u(t)"
dann erscheint die Fehlermeldung
u.fname = "u(t)"
AttributeError: 'Add' object has no attribute 'fname'

Re: Einem Add Objekt Atriubute geben

Verfasst: Freitag 20. September 2013, 14:06
von BlackJack
@Nergal53: Laut Ausgabe versuchst Du der *Klasse* ein Attribut hinzuzufügen‽ Irgendwelchen Exemplaren Attribute hinzuzufügen kann manchmal ganz nützlich sein, aber bei Klassen wäre ich dann doch eher vorsichtig. Damit verändert man Singletons und damit globalen Zustand. Das ist ziemlich unsauber und birgt Gefahren. Und wie Du gesehen hast funktioniert es nicht mit jeder Klasse, da man nicht auf jeder Klasse neue Attribute einführen kann. Zum Beispiel bei Klassen die in C geschrieben sind und das nicht vorsehen oder bei welchen die `__slots__` verwenden.