Attribute type 'ethanol' has no attribute 'ah'

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
snjackshot
User
Beiträge: 1
Registriert: Mittwoch 21. April 2021, 19:23

Guten Tag,
folgendes Problem wenn ich diese Klasse verwenden möchte:

Code: Alles auswählen

class ethanol:

        self.Ah=1232785
        self.Bh=0.32297
        self.Ch=0.037345
        self.Dh=-0.042848
        self.Eh=0.018252
        
       

Code: Alles auswählen

def FdhLV(TinC,struktur):

    A=struktur.Ah;B=struktur.Bh;C=struktur.Ch;D=struktur.Dh;E=struktur.Eh;
    Tkrit_inK=struktur.Tkrit;
    TinK=TinC+273.15;
    faktor=TinK/Tkrit_inK;
    if faktor>1:
        y=0
    else:
        y=(A*(1-faktor)**(B+C*faktor+D*faktor**2+E*faktor**3))/1000
    return y

Code: Alles auswählen

E=ethanol
dh=FdhLV(36,E)
und dann zeigt mir Phyton an:

Code: Alles auswählen

AttributeError: type object 'ethanol' has no attribute 'Ah'
Ich versteh nicht warum.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Das, was du präsentierst, ist entweder nicht der Code, den du tatsächlich hat, oder der Fehler, den du bekommst, ist ein anderer. Guckstu:

Code: Alles auswählen

 python3           
Python 3.7.10 (default, Feb 26 2021, 15:35:19) 
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> class ethanol:
...         self.Ah=1232785
...         self.Bh=0.32297
...         self.Ch=0.037345
...         self.Dh=-0.042848
...         self.Eh=0.018252
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in ethanol
NameError: name 'self' is not defined
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
Dennis89
User
Beiträge: 1154
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

bitte verwende keine so gar nichts sagende Abkürzungen. Wähle immer sprechende Namen. Funktionsnamen sollten beschreiben was die Funktion macht. Diese schreibt man auch klein_mit_unterstrich, so wie andere Namen auch. Ausgenommen sind Konstanten die schreibt man GANZ_GROSS und Klassen schreibt man in CamelCase-Schreibweise.

Kannst du bitte den vollständigen Code am Stück posten?
Ich kann deinen Fehler so nicht nachstellen bzw. wenn ich deinen Code ausprobiere erhalte ich andere Fehlermeldungen.

Die Einrückungen in deiner Klasse stimmen nicht, es wird immer mit vier Leerzeichen eingerückt.

Zum Rest will ich so jetzt noch nichts sagen, da ich nicht weis wie der vollständige Code aussieht.
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snjackshot: Wenn man sich die Funktion mal etwas lesbarer formatiert, macht das irgendwie den Eindruck, dass B, C, D, E eventuell eine Liste sein sollten:

Code: Alles auswählen

def FdhLV(TinC, struktur):
    faktor = (TinC + 273.15) / struktur.Tkrit
    return (
        0
        if faktor > 1
        else (
            struktur.Ah
            * (1 - faktor)
            ** (
                struktur.Bh
                + struktur.Ch * faktor
                + struktur.Dh * faktor ** 2
                + struktur.Eh * faktor ** 3
            )
        )
        / 1000
    )
Denn dann könnte man den Exponenten anders ausdrücken als jeden Summanden hin zu schreiben:

Code: Alles auswählen

def FdhLV(TinC, struktur):
    faktor = (TinC + 273.15) / struktur.Tkrit
    return (
        0
        if faktor > 1
        else (
            struktur.Ah
            * (1 - faktor)
            ** sum(
                value * faktor ** i for i, value in enumerate(struktur.BCDEh)
            )
        )
        / 1000
    )
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten