Seite 1 von 1

PythonNET - Abruf eines Klassenattributes schlägt fehl

Verfasst: Dienstag 5. Mai 2020, 17:22
von xXSkyWalkerXx1
Guten Abend,

seit neulich arbeite ich mit PythonNet, um eine .NET DLL API zu benutzen.
Es war anfänglich etwas schwer die API zu verstehen,zu Mal ich nicht bemerkt habe, dass deren XML Dok hilfreicher ist als deren Textdatei, aber hat letztendlich geklappt.
Problem ist nur, dass es beim Aufruf eines Klassenattributes scheitert.
Zunächst ersteinmal den Code...

Code: Alles auswählen

import clr,sys,os
path = os.path.dirname(os.path.abspath(__file__))
sys.path.append(path)
clr.AddReference("LibCronusMAX")



import LibCronusMAX
from System import EventHandler


class CronusMaxAPI:
    device      = LibCronusMAX.SingleDevice()
    deviceInfo  = LibCronusMAX.DeviceInformation
    deviceCmd   = LibCronusMAX.CmCommandEx()

    def __init__(self):
        print(self.deviceInfo.Fw) #Hier ERROR!
        
        #self.device.DeviceInformationChanged += EventHandler[self.deviceInfo](self.deviceInfoChanged)
        self.device.StartWorkerThreads()
        
    def deviceInfoChanged(self):
        #</code...
        pass


CronusMaxAPI()
Und der Fehlercode...

Code: Alles auswählen

TypeError: instance property must be accessed through a class instance
Ich habe viel recherchiert, aber nichts brachte mich weiter.
Wenn ich etwas von den aufgerufenen Instanzen abfrage, funktioniert es, nur nicht bei der nur erstellten, also ohne Konstruktor.
Wo besteht also nun das Problem und wie/kann man das lösen?

Grüße,
xXSkyWalkerXx1

Re: PythonNET - Abruf eines Klassenattributes schlägt fehl

Verfasst: Dienstag 5. Mai 2020, 22:33
von xXSkyWalkerXx1
Hinweis: die Klasse "LibCronusMAX.DeviceInformation" benötigt bzw. hat kein Konstruktor (falls jemand auf die Idee kommt^^).

Re: PythonNET - Abruf eines Klassenattributes schlägt fehl

Verfasst: Mittwoch 6. Mai 2020, 05:57
von sparrow
Die Fehlermeldung ist doch eindeutig: Was immer duntust, musst du mit der Instanz einer Klasse und nicht mit der Klasse direkt tun.

Re: PythonNET - Abruf eines Klassenattributes schlägt fehl

Verfasst: Mittwoch 6. Mai 2020, 06:37
von xXSkyWalkerXx1
sparrow hat geschrieben: Mittwoch 6. Mai 2020, 05:57 Die Fehlermeldung ist doch eindeutig: Was immer duntust, musst du mit der Instanz einer Klasse und nicht mit der Klasse direkt tun.
Ja, ist mir klar, nur ist die Klasse keine aufrufbare, sie hat kein Konstruktor, sondern nur Attribute. Sie enthält also nur Informationen.
In den Codebeispielen bei der API wurde die Klasse nirgends aufgerufen, auch in der API steht kein Konstruktor.

Re: PythonNET - Abruf eines Klassenattributes schlägt fehl

Verfasst: Mittwoch 6. Mai 2020, 08:17
von __deets__
Warum benutzt du nicht einfach .NET und sparst dir den ganzen Wahnsinn, den du mit den Reibungsverlusten durch die Sprachintegration hast? C# ist eine ordentliche Sprache, die man gut benutzen kann. Und du bist eh im Windows Ökosystem verhaftet.

Re: PythonNET - Abruf eines Klassenattributes schlägt fehl

Verfasst: Mittwoch 6. Mai 2020, 11:37
von xXSkyWalkerXx1
Also auf Enums kann ich wohl zugreifen, aber nicht auf simple variablen.

Warum ich nicht C# benutzen will? Weil ich keine Lust habe die Sprache extra zu lernen und dann mein Interface + CV Algorithmus umzuwandeln.

Re: PythonNET - Abruf eines Klassenattributes schlägt fehl

Verfasst: Mittwoch 6. Mai 2020, 11:49
von __deets__
Die Frage ist, was schneller geht....

Re: PythonNET - Abruf eines Klassenattributes schlägt fehl

Verfasst: Mittwoch 6. Mai 2020, 11:56
von xXSkyWalkerXx1
__deets__ hat geschrieben: Mittwoch 6. Mai 2020, 11:49 Die Frage ist, was schneller geht....
Ja, das ist immer 'ne gute Frage. ;D
Aber ich denke, dass muss man in dem Fall erstmal herausfinden, wie schnell alles gesamt ablaufen würde und inwiefern
man das noch optimieren könnte.