Sehr sehr viele fragen zu Objekten in Py

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
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

Hallo Leute,


mal wieder ersehne ich mich um ein paar Antworten von euch.

Nun will ich endlich mal die Klassen in Python ein wenig genauer ansehen und zack, bin ich schon auf einige Problematiken gestossen.

Erstmal ein paar Worte dazu:

Da ich von Beruf Elektroniker bin, wollte ich mir ein nettes Script schreiben, welches vorerst das bekannte Ohmsche Gesetz als kleine "Aufwärmung" schreiben.

Hier mal der Code, der logischerweise nicht funktioniert^^

http://pastebin.com/rhTqmUq1

Das Problem an dem ganzen:

1. Wenn ich nun 2 größen miteinander Teile oder Multipliziere, um die neue Physikalische Größe zu erhalten, endet das ganze in einer Endlosschleife.

2. Alle diese Physikalischen Größen dürfen keinen negativen Wert annehmen. Wie stelle ich das an?

MfG und danke schon mal :)
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Bin gerade zu müde für Erklärungen, aber hier ist eine Möglichkeit, wie es gehen könnte: http://www.python-forum.de/pastebin.php?mode=view&s=299

Oder man verwendet Multi Methods: http://www.python-forum.de/pastebin.php?mode=view&s=300

Finde ich persönlich übersichtlicher, aber YMMV.

Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

Danke, wusste gar nicht dass es sowas in einer ziemlich ähnlichen Form bereits existiert.

Dann lag ich ja gar nicht mal so weit daneben mit meinem Versuch =)

Vielen Dank schon mal, ich werd mich dann melden, wenns an die komplexeren dinge der elektrotechnik geht. Des war schon mal ein erster guter schritt für meine Python kenntnisse :)
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

Hallo, hab mal wieder ne frage...


Wie finde ich denn heraus, wenn eine dieser Klassen durch 1 geteilt wird?


wenn ich

Code: Alles auswählen

def __div__(self, other):
benutze, kann ich ja nur herrausfinden, dass diese Klasse durch ein anderes objekt geteilt werden soll..
BlackJack

@Brainsucker: Ähm, ``if other == 1:``‽
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

Negativ, hab ich schon versucht und hat nicht funktioniert. Des hat nur funktioniert, als ich die Klasse selber durch 1 geteilt habe.
BlackJack

@Brainsucker: Ja aber das war doch die Frage, oder nicht? Wobei Du streng genommen hier immer Klasse sagst wo Du Exemplar meinst.
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

BlackJack hat geschrieben:@Brainsucker: Ja aber das war doch die Frage, oder nicht? Wobei Du streng genommen hier immer Klasse sagst wo Du Exemplar meinst.

Genau, so ist es.

Ich möchte wissen, wann der benutzer folgendes macht:

Code: Alles auswählen

x = BeliebigesObjekt()
y = 1 / x # Kehrwert des Objekts
und je nachdem soll etwas bestimmtes passieren.

Das Problem dabei ist, wenn ich die __div__ Funktion so aufbaue:

Code: Alles auswählen

def __div__(self, other):
und dann prüfe ob das andere Objekt die ´1´ ist:

Code: Alles auswählen

if other == 1:
(die den Kehrwert des Objekts machen soll)

Passiert schlichtweg gar nichts.


Edit:

__rdiv__ war die Lösung! Danke Leute!
Brainsucker
User
Beiträge: 68
Registriert: Mittwoch 16. November 2011, 23:20

Soo mal wieder ne frage^^


Und zwar:

Ich habe mich nun entschieden das ganze über das Modul unum zu realisieren. Dieses Modul erkennt die zusammenhänge zwischen den Physikalischen größen automatisch und gibt mir somit auch automatisch die resultierende Größe zurück.

Meine Frage dazu ist nun, dass ich eine Art "Formel" mit diesem Modul erstellen will, wo ich nur die Grundformel angeben muss und die Klasse dann automatisch diese "Einzelgrößen" als Parameter verlangt.

Ein einfaches Beispiel dazu:

Code: Alles auswählen

import unum.units
# Geschwindigkeit
v = Formel(unum.units.M / unum.units.s)
So stelle ich mir das in etwa vor.
Diese (oben nicht definierte) ´Formel´ Klasse soll dann beim aufruf diese beiden Größen automatisch als Parameter ´benötigen´.

Wichtig bei dem ganzen Spektakel ist, dass teilweise auch Werte verarbeitet werden müssen, die KEINE physikalische Einheit haben (und sie somit auch nicht als Unum Objekt repräsentiert werden können)
Antworten