簡體   English   中英

PYTHON從模塊中的類導入方法

[英]PYTHON importing methods from class in module

我很難在我制作的模塊中使用類中的屬性。 我正在使用 PyCharm 並嘗試使用 pygame 創建一個小游戲。

這是模塊 Player_class.py 的內容:

import pygame
# Créer une classe qui représente le joueur
class Player(pygame.sprite.Sprite):  

 def __init__(self):
 super().__init__()  # Permet d'utiliser le paramètre sprite de la super classe pygame.sprite.Sprite
 self.health = 100  # Points de vie variables durant le jeu
 self.max_health = 100
 self.attack = 10
 self.velocity = 5  # Vitesse du joueur en pixels
 self.image = pygame.image.load(r"C:\Users\Utilisateur\PycharmProjects\GravenJeu\assets\Jump (32x32).png")
 self.rect = self.image.get_rect()  # Pour avoir la position du joueur
 self.rect.x = 500
 self.rect.y = 600

 def move_right(self):
 self.rect.x += self.velocity

def move_left(self):
 self.rect.x -= self.velocity

這是 Game_class.py 模塊中的代碼: from Player_class import Player

class Game:
 def __init__(self):
 self.player = Player()
 self.pressed = {}

這是 main.py 中的代碼:

import pygame
from Game_class import Game
pygame.init()

pygame.display.set_caption("Beach Brawl")
screen = pygame.display.set_mode((1080,720))

# Import background
background = pygame.image.load("assets/beachBG.jpg")

# Charger le jeu
game = Game

# Charger le joueur
player = game.player()

# Boucle tant que cette condition est vraie
running = True
while running:

# Appliquer le background
 screen.blit(background,(-200,-50))

# Appliquer l'image du joueur
 screen.blit(player.image, player.rect)

# Mettre à jour l'écran
 pygame.display.flip()

#Si le joueur ferme cette fenêtre
 for event in pygame.event.get():
 # Pour vérifier que event = fermeture de fenetre
 if event.type == pygame.QUIT:
            running = False
 pygame.quit()

# To detect if the player is pressing & releasing keys
 elif event.type == pygame.KEYDOWN:
            game.pressed[event.key] = True
        elif event.type == pygame.KEYUP:
            game.pressed[event.key] = False

我從 PyCharm 得到的錯誤是“Unresolved attribute reference 'pressed' for class 'Game'”我知道問題與導入模塊有關......我們可以導入一個完整的模塊並像這樣使用它:

import Full_module

Full_module.function_in_module()

或從模塊導入特定功能

from Full_module import function_in_module

function_in_module()

但是由於我使用的是類和方法(我相信方法是類中的函數),因此在從模塊導入和使用它們時可能會有所不同。

我的問題是游戲類中的 self.pressed 屬性“Unresolved attribute reference 'pressed' for class 'Game'”

請幫助一個菜鳥:)

不要用...

game = Game

...但使用...

game = Game()

... 反而。

A game = Game創建一個變量game ,它接收類 (!!!) Game

game = Game()創建一個變量game ,它將接收一個Game類 (!!!) 的實例。

這應該可以解決您的問題。

備注:從模塊導入的(通常)是函數和類。 當您直接調用函數時,您(通常)不會直接訪問類上的成員。 如果這些成員是靜態的,您只能這樣做。 但是, pressed類的變量不是靜態的,因此您需要先創建類Game實例 (這是構建程序的非常非常非常典型的方式。靜態成員僅在非常特定的情況下使用,在您的情況下不適用。)

(所以:這不是導入的問題。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM