Einem Add Objekt Attribute geben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Nergal53
User
Beiträge: 10
Registriert: Sonntag 15. September 2013, 08:26

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.
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!?
Nergal53
User
Beiträge: 10
Registriert: Sonntag 15. September 2013, 08:26

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Nergal53
User
Beiträge: 10
Registriert: Sonntag 15. September 2013, 08:26

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'
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.
Antworten