class in python

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • sanderbroos
  • Registratie: Juni 2013
  • Laatst online: 28-11-2023
Ik heb de volgende code gemaakt als test:

code:
1
2
3
4
5
6
7
8
9
class Honden:
    def __init__(self, naam, ras, leeftijd):
        self.naam = naam
        self.ras = ras
        self.leeftijd = str(leeftijd)

uitkomst = Honden('Timo', 'Kruising', '3')

print("De hond heet {}, is {} jaar oud en is een {}.") .format(self.naam, self.ras, self.leeftijd)


Ik krijg als foutmelding:

Traceback (most recent call last):
File "C:\Users\S****\*****\**\class test.py", line 9, in <module>
print("De hond heet {}, is {} jaar oud en is een {}.") .format(self.naam, self.ras, self.leeftijd)
AttributeError: 'NoneType' object has no attribute 'format'

Wat doe ik verkeerd?

[ Voor 4% gewijzigd door sanderbroos op 01-11-2022 10:13 ]

Beste antwoord (via sanderbroos op 01-11-2022 10:42)


  • samo
  • Registratie: Juni 2003
  • Laatst online: 16:02

samo

yo/wassup

self gebruik je als je een functie hebt binnen de class. In dit geval zou je in plaats van self uitkomst moeten gebruiken.

Bekend van cmns.nl | ArneCoomans.nl | Het kindertehuis van mijn pa in Ghana

Alle reacties


Acties:
  • 0 Henk 'm!

  • simson0606
  • Registratie: Juni 2015
  • Laatst online: 16:00
self heeft niet de attributen naam, ras en leeftijd.

Je moet kijken naar de instantie van Honden die je gemaakt hebt.


(Kleine opmerking: Ik zou enkelvoud gebruiken voor de klassenaam, het gaat namelijk maar over één hond)

Acties:
  • +1 Henk 'm!

  • Yohsoog
  • Registratie: Maart 2010
  • Laatst online: 23-01 10:59
Jouw haakje staat verkeerd bij je print. Je probeert nu een format op jouw print statement te doen in plaats op de string zelf.

Zo dus:
code:
1
print("De hond heet {}, is {} jaar oud en is een {}." .format(self.naam, self.ras, self.leeftijd))


Daarnaast zou ik eens kijken naar f-strings, veel handiger als je het mij vraagt.

[ Voor 52% gewijzigd door Yohsoog op 01-11-2022 10:19 ]


Acties:
  • 0 Henk 'm!

  • sanderbroos
  • Registratie: Juni 2013
  • Laatst online: 28-11-2023
Thnx. Als ik dat invoer krijg ik de volgende foutmelding:

NameError: name 'self' is not defined

Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • samo
  • Registratie: Juni 2003
  • Laatst online: 16:02

samo

yo/wassup

self gebruik je als je een functie hebt binnen de class. In dit geval zou je in plaats van self uitkomst moeten gebruiken.

Bekend van cmns.nl | ArneCoomans.nl | Het kindertehuis van mijn pa in Ghana


Acties:
  • +4 Henk 'm!

  • HikariMisako
  • Registratie: Januari 2008
  • Laatst online: 19:01
Ik denk dat je even terug moet naar de python cursus waar je classes aan het maken bent, wat je doet mist nog behoorlijk wat.

Als je deze code uitvoert, dan heeft is regel 7 het object "uitkomst" een instantie van de klasse "Honden" met de gegeven naam, leeftijd en ras. Als je dit dan vervolgens wilt printen, moet je niet "self.naam" gebruiken, maar "uitkomst.naam" etc. Self is alleen maar toegankelijk binnen de klasse, niet daarbuiten.

Acties:
  • 0 Henk 'm!

  • sanderbroos
  • Registratie: Juni 2013
  • Laatst online: 28-11-2023
Dank je, beginnersfout inderdaad. Ik ben het dan ook nog aan het leren, dus thnx voor de feedback. Het is erg moeilijk om zonder feedback van anderen puur op internet dit te leren. Ik heb wel een (beginners)cursus gehad, maar iemand voordoen hoe een hengel in elkaar moet kun je nog niet mee vissen :-)

Ik mis soms een hulplijn....

Acties:
  • +1 Henk 'm!

  • Ben(V)
  • Registratie: December 2013
  • Laatst online: 15:46
Ok ik zal je een eindje op weg helpen.
self is een manier om variabelen te definiëren die in elke functie van de class bekend is.
Wel moet elke functie van die class als eerste parameter dan de variable self hebben.

Eerst definieer je een class met in de __init__ een dict van honden met gegevens over die honden met voor elke hond een lijst bestaande uit ras en leeftijd.
Dan maak je twee functies de eerste retourneert het ras van de hond en de tweede de leeftijd.

Vervolgens maak je een instance van die class in dit geval heb ik de variable "Data" gebruikt

Nu kun je de functies van die instance aanroepen met een honden naam en dan krijg je de gewenst gegevens terug

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class HondenData():
    def __init__(self):
        self.honden = {}
        self.honden['Timo']   = ['kruising', 3]
        self.honden['Fikkie'] = ['tekkel', 1]
        self.honden['Bello']  = ['herder', 8]

    def Ras(self, naam):
        return self.honden[naam][0]

    def Leeftijd(self, naam):
        return self.honden[naam][1]

Data = HondenData()

Mijnhond = 'Timo'
print(f"De hond heet {Mijnhond}, hij is {Data.Leeftijd(Mijnhond)} jaar oud en is een {Data.Ras(Mijnhond)}.")

Mijnhond = 'Bello'
print(f"De hond heet {Mijnhond}, hij is {Data.Leeftijd(Mijnhond)} jaar oud en is een {Data.Ras(Mijnhond)}.")

Mijnhond = 'Fikkie'
print(f"De hond heet {Mijnhond}, hij is {Data.Leeftijd(Mijnhond)} jaar oud en is een {Data.Ras(Mijnhond)}.")

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.


Acties:
  • 0 Henk 'm!

  • sanderbroos
  • Registratie: Juni 2013
  • Laatst online: 28-11-2023
super dit helpt enorm! thnx!
Pagina: 1