Bool Object is not callable, benötige Hilfe beim verändern des Codes

Code-Stücke können hier veröffentlicht werden.
Benutzeravatar
__blackjack__
User
Beiträge: 4681
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Samstag 30. November 2019, 19:08

@Tilltall: Die Methode `drinkable()` ist unnötig kompliziert. Erst einmal ist das umwandeln in `float()` überflüssig, denn das Attribut sollte ja bereits eine Zahl sein. Dann würde man da nicht zwei Vergleiche mit ``and`` Verbinden sondern die einfach verketten, so wie man das in der Mathematik auch schreiben würde.

Wenn es einen Getter und/oder ein Property gibt, dann sollte man das auch benutzen. Wobei es auch nicht Getter *und* Property geben sollte, denn dann hat man zwei Wege um das gleiche zu erreichen ohne dass einer einen Vorteil gegenüber dem anderen hätte. Was soll derjenige der diese Objekte benutzt denn dann wählen und warum? Das stiftet nur Verwirrung. Letztendlich würde ich da weder Getter noch Property definieren sondern einfach ein öffentliches Attribut.

Und das ``if``/``else`` ist überflüssig. Die Bedingung beim ``if`` ergibt bereits `True` oder `False`. Genau das kann man dann auch einfach direkt zurückgeben.

Der Docstring der Klasse `Drink` sagt einfach nur "Klasse Drink". Das ist für die Tonne weil das genau Null Mehrwert hat. Der von der `__init__` ist auch nicht so besonders. Das `float` ist nicht so wichtig, denn das sollte auch funktionieren wenn die Temperator als Ganzzahl, Bruch, oder ähnliches angegeben wird. Was für den Leser viel interessanter wäre, ist die Einheit in der die Temperatur angegeben werden soll. Die Zahlen bei `drinkable` lassen vermuten, dass es nicht Kelvin ist und/oder die Zielgruppe für diese Drinks keine Menschen sind. 😉

Ich würde die Docstrings auch in englischer Sprache abfassen, sonst klingt das teilweise doof wenn man die englischen Bezeichner da mit rein bringt.

Komplette Klasse:

Code: Alles auswählen

class Drink:
    def __init__(self, temperature):
        """
        Initialisiere einen `Drink` mit der gegebenen `temperature` in °C.
        """
        self.temperature = temperature

    def drinkable(self):
        """Test ob der Drink eine trinkbare Temperatur hat."""
        return 4 <= self.temperature <= 50
Ist allerdings etwas dünn da nur die Temperatur mit einer einzigen Methode in eine Klasse zu stecken. Dafür hätte auch eine Funktion ausgereicht.
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
Antworten