[英]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.