Properties statt Getters und Setters Properties
Verfasst: Dienstag 12. Oktober 2021, 08:28
Hallo allerseits,
Ich habe endlich den Absprung von Pflanzen und Bäumen in reale Anwendungen der Objektorientierten Programmierung geschafft und meine erste Klasse Programmiert.
Ohne die Daten Datenkapselung hat sie Funktioniert.
Um es richtig zumachen habe ich mit Datenkapselung begonnen und bin bei Properties statt Getters und Setters gelandet.
Mein erste Frage:
Soll man wirklich Properties statt Getters und Setters verwenden?
https://www.python-kurs.eu/python3_properties.php
Mein zweite Frage:
Mein Code meldet einen TypeError: 'int' object is not callable
Ich sehe aber nicht wo genau.
Anscheinden bei dieser Zeile, aber eienen str übergeben brachte den selben fehler
kanal1.uebertragen(100)
Code:
Ausführen:
fehler:
gruss
Ich habe endlich den Absprung von Pflanzen und Bäumen in reale Anwendungen der Objektorientierten Programmierung geschafft und meine erste Klasse Programmiert.
Ohne die Daten Datenkapselung hat sie Funktioniert.
Um es richtig zumachen habe ich mit Datenkapselung begonnen und bin bei Properties statt Getters und Setters gelandet.
Mein erste Frage:
Soll man wirklich Properties statt Getters und Setters verwenden?
https://www.python-kurs.eu/python3_properties.php
Mein zweite Frage:
Mein Code meldet einen TypeError: 'int' object is not callable
Ich sehe aber nicht wo genau.
Anscheinden bei dieser Zeile, aber eienen str übergeben brachte den selben fehler
kanal1.uebertragen(100)
Code:
Code: Alles auswählen
#!/usr/bin/env python3
import smbus
import sys
import time
class I2C_AnalogAusgang:
"""
I2C_AnalogAusgang 4 Kanal 0-12V
minimale Wert liegt bei 0x0000 (dec. 0) der Maximale 0x03FF (dec. 1023)
"""
def __init__(self, Digitalwert, Bus_Adresse, Bus_Kanal):
"""
Initialisiert ein neues Objekt I2C_AnalogAusgang
Argumente:
* Digitalwert (int): ergibt am Physischen Ausgang 0 – 10 Vol
* Bus_Adresse (int): Bus-Adresse des PCF 8574 in Hex eingeben
* Bus_Kanal (int): Bus_Kanal 1 -4 in Hex eingeben
"""
self.__Digitalwert = Digitalwert
self.__Bus_Adresse = Bus_Adresse
self.__Bus_Kanal = Bus_Kanal
@property
def Digitalwert(self):
return self.__Digitalwert
@Digitalwert.setter
def uebertragen(self, aenderung):
try:
bus = smbus.SMBus(1)
if aenderung <= 0:
self.__Digitalwert = 0
elif aenderung > 1023:
self.__Digitalwert = 1023
else:
self.__Digitalwert = aenderung
a = self.__Digitalwert
HBy = int(a / 256)
LBy = int(a - HBy * 256)
field = [LBy, HBy]
bus.write_i2c_block_data(self.__Bus_Adresse, self.__Bus_Kanal, field)
except (ValueError):
bus = smbus.SMBus(1)
self.Digitalwert = aenderung
a = 0
HBy = int(a / 256)
LBy = int(a - HBy * 256)
field = [LBy, HBy]
bus.write_i2c_block_data(self.__Bus_Adresse, self.__Bus_Kanal, field)
except:
print("Fehler:", sys.exc_info()[0])
sys.exit("I2C_AnalogAusgang Fehler")
def __str__(self):
ausgabe = "Digitalwert: %d \n" % self.__Digitalwert
ausgabe += "Bus_Adresse: %f \n" % self.__Bus_Adresse
ausgabe += "Bus_Nummer: %s \n" % self.__Bus_Kanal
return ausgabe
def __repr__(self):
ausgabe = "Digitalwert: %d \n" % self.__Digitalwert
ausgabe += "Bus_Adresse: %f \n" % self.__Bus_Adresse
ausgabe += "Bus_Nummer: %s \n" % self.__Bus_Kanal
return ausgabe
Ausführen:
Code: Alles auswählen
import I2C_AnalogAusgang
def main():
kanal1 = I2C_AnalogAusgang.I2C_AnalogAusgang(0, 0x58, 0x00)
print(kanal1)
kanal1.uebertragen(100)
fehler:
Code: Alles auswählen
Traceback (most recent call last):
File "/root/.pycharm_helpers/pydev/pydevd.py", line 1483, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "/root/.pycharm_helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/opt/loxberry/webfrontend/legacy/pythonfiles/0-10V-run.py", line 16, in <module>
main()
File "/opt/loxberry/webfrontend/legacy/pythonfiles/0-10V-run.py", line 9, in main
kanal1.uebertragen(100)
TypeError: 'int' object is not callable
python-BaseException