Python: Hur anropar jag en klassmetod?

Permalänk
Medlem

Python: Hur anropar jag en klassmetod?

https://repl.it/@melinahafelt/AJklajdlk

Här är min och det är den allra sista kondnustten längst ned, jag har:

Jag har försökt::

1. tabbat in och testat return play()
2. bara haft play() med och utan intabbningar
3. lagt in def_play inuti klassen newgrid
4. använd pass etc..
5. testat play_game

Och det enda jag kan tänka mig att jag msåte ha är att jag här:

class newgrid: def __init__(self, grid, play): #är konstruktor för att injicera ett nytt objekt self.grid = grid self.play=play def play(self): <—— här här här här <—— måste lägga till syfte paramteer retur värden? som det står i sista länken sida 3. men jag har ju redan förklarat all syfta osv i defintionen ovan den här kodsnutten i def play_game play()

Så då tänkte jag, jag struntar i att göra en klass och av det, alt. tar hela kodsnutten ovanför class newgrid och sätter in hela def play_game()

IIIII den klassen, men det fungerar inte heller.

Så jag har ingen aning om vad jag ska göra… jag fattar inre varför det inte går…

Men oavsett så säger den att play inte är definend, men jag har ju förklarat allt med play i def play_game

Asså blir tokig….

Pls, kan inte ngn bara ge mig koden så kan jag försöka förstå den.Q

Förtydligat rubrik / mod
Permalänk
Medlem

Inte säker på vad du försöker åstadkomma, men du måste kalla på classen först, och sen funktionen.

Dvs
newgrid.play()
alternativt
grid.play_game()

Permalänk
Medlem

Bara av att skummat igenom koden lite snabbt men du kan inte anropa en funktion i en class utan att ha skapat ett objekt av den klassen först vad jag vet. Sedan ett tips är att namnge dina klasser i med stor bokstav i början. T.ex. Grid och inte grid.

Så du behöver göra liknande:

g = Grid() # skapar instansen g.play() # metodanropet (funktion)

Lär dig hur det funkar här: https://docs.python.org/3/tutorial/classes.html#class-objects

Permalänk
Medlem
Skrivet av Skyclaw:

Inte säker på vad du försöker åstadkomma, men du måste kalla på classen först, och sen funktionen.

Dvs
newgrid.play()
alternativt
grid.play_game()

jag vill att programmet ska köras.

Permalänk
Medlem
Skrivet av xzv:

Bara av att skummat igenom koden lite snabbt men du kan inte anropa en funktion i en class utan att ha skapat ett objekt av den klassen först vad jag vet. Sedan ett tips är att namnge dina klasser i med stor bokstav i början. T.ex. Grid och inte grid.

Så du behöver göra liknande:

g = Grid() # skapar instansen g.play() # metodanropet (funktion)

Lär dig hur det funkar här: https://docs.python.org/3/tutorial/classes.html#class-objects

g = class newgrid: def __init__(self, grid, play): #är konstruktor för att injicera ett nytt objekt self.grid = grid self.play=play def play(self): <—— här här här här <—— måste lägga till syfte paramteer retur värden? som det står i sista länken sida 3. men jag har ju redan förklarat all syfta osv i defintionen ovan den här kodsnutten i def play_game g.play()

men jag vet inte vad jag ska skriva där inuti ,eftersom jag har redan skrivit def play inann...buuuuhu, sliter av mig håret. Pls kan du inte ba ge en koooood? =/

Permalänk
Medlem
Skrivet av melhaf:

Pls kan du inte ba ge en koooood? =/

Dagisnivå, vad lär du dig av detta?

Som flera skriver ovan så har du inte instansierat ett enda objekt i din kod, därför kan du inte köra din play().

Visa signatur

AMD Ryzen R9 3900X | Gigabyte Aorus Ultra X570 | Corsair 64GB | RTX 3080 Ti

Permalänk
Medlem
Skrivet av Henkezd:

Dagisnivå, vad lär du dig av detta?

Som flera skriver ovan så har du inte instansierat ett enda objekt i din kod, därför kan du inte köra din play().

lol.. ok. Jag brukar annars plugga matte, och då brukar vi ha att läraren räknar uppgifter - antingen fr boken eller en tenta, tycker du att det dagisnivå då eller?

Varför kan jag inte bara sätta in den in iiiii def play då? varför måste den vara i en egen klass? För jag har läst att om man har tex

def kaka . . . kaka()

så man anropar med samma namn som definitionen har

så om jag skiter i den där g-klassen, och bara har en anrop hos def play_game,
så säger den fortf att den inte är definierad. vad beror det på? varför kan man inte göra så?

Alltså
varför kan inte detta fungera

#play game def playGame(): boardSize = int(input("Choose the Width of the board: ")) numMines = int(input("Choose the number of mines: ")) gameOver = False winner = False Board = boardClass(boardSize, numMines) while not gameOver: print(Board) print("Make your move:") x = int(input("x: ")) y = int(input("y: ")) Board.makeMove(x, y) gameOver = Board.hitMine(x, y) if Board.isWinner() and gameOver == False: gameOver = True winner = True print(Board) if winner: print("Congratulations, You Win!") else: print("You hit a mine, Game Over!") playGame()

Permalänk
Medlem

Det här funkar om du bara vill starta spelet... https://repl.it/repls/PuzzlingLinenFiles
Men jag tror du får ta en vända till i programmeringsboken.

Permalänk
Medlem
Skrivet av Skyclaw:

Det här funkar om du bara vill starta spelet... https://repl.it/repls/PuzzlingLinenFiles
Men jag tror du får ta en vända till i programmeringsboken.

ja men det var sådär jag gjorde förut, men då säger ju den att mines inte är definierad, det var därför jag tänkte jag skulle göra en "subklass" eller vad det nu kallas.

och använder:

class play_game(grid): def __init__(self,play): grid.__init___(self,play) self.play_game=play_game play_game()

från https://stackoverflow.com/questions/1607612/python-how-do-i-m...

får detta felmeddelande:

/Users/Melina/Deskop/py_git/venv/bin/python /Users/Melina/Deskop/py_git/aajd.py Traceback (most recent call last): File "/Users/Melina/Deskop/py_git/aajd.py", line 126, in <module> play_game() TypeError: __init__() missing 1 required positional argument: 'play' Process finished with exit code 1

Permalänk
Hedersmedlem

Hej, @melhaf och välkommen till Sweclockers!

Jag har vart inne och förtydligat din rubrik och även flyttat din tråd till rätt delforum, nämligen Programmering och digitalt skapande. Detta eftersom bra trådrubriker och rätt placering i forumet ger ett mer lättnavigerat forum, både för en diskussion som pågår, så att rätt personer kan se den, och för att hitta gamla diskussioner.

Lycka till med ditt projekt!

Med vänlig hälsning,
pv2b (Moderator)

Permalänk
Medlem

Jag tror det bästa sättet för att få detta att fungera är att du kör lite "Rubber duck debugging".

Gå igenom koden steg för steg och se vart du fastnar.
Ett problem till jag ser när jag tittar vidare på din kod är att du försöker använda metoder inuti din class utan att referera till self.
Då förväntar sig Python att det finns en metod som heter så utanför din class.

Titta på detta korta exempel jag knappade ihop:
https://repl.it/repls/FrightenedBeneficialOctal

Metoden Number() finns inte heller i din class, ser att du har en som heter Num() dock.

Lycka till

Visa signatur

AMD Ryzen R9 3900X | Gigabyte Aorus Ultra X570 | Corsair 64GB | RTX 3080 Ti