Seite 1 von 1

Attribute type 'ethanol' has no attribute 'ah'

Verfasst: Mittwoch 21. April 2021, 19:35
von snjackshot
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.

Re: Attribute type 'ethanol' has no attribute 'ah'

Verfasst: Mittwoch 21. April 2021, 20:00
von pillmuncher
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

Re: Attribute type 'ethanol' has no attribute 'ah'

Verfasst: Mittwoch 21. April 2021, 20:08
von Dennis89
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.

Re: Attribute type 'ethanol' has no attribute 'ah'

Verfasst: Mittwoch 21. April 2021, 20:56
von __blackjack__
@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
    )