如何将变量从一个类传递到另一个类?
问题描述:
我正在尝试创建一个基本的游戏,但我对Python编程场景相当陌生。我遇到过两个阶级(玩家和敌人阶级)的问题,我想从玩家和敌人那里获得类似健康的变量,反之亦然。有什么办法做到这一点?如何将变量从一个类传递到另一个类?
这里是更好地强调什么,我问代码:
class Player(object):
def __init__(self, image):
self.x = 100
self.y = 240
self.health = 30
self.defense = 25
self.image = image
self.black = (0, 0, 0)
self.draw()
def draw(self):
screen.blit(self.image, (self.x, self.y))
line = pygame.draw.rect(screen, self.black, (80, 300, 100, 5))
def attack(self):
pass
class Enemy(object):
def __init__(self, image):
self.x = 480
self.y = 240
self.health = 20
self.defense = 15
self.image = image
self.black = (0, 0, 0)
self.draw()
def draw(self):
screen.blit(self.image, (self.x, self.y))
line = pygame.draw.rect(screen, self.black, (460, 300, 100, 5))
def attack(self):
pass
基本上,我不明白我怎么可以像从一个类中的“self.health”,并轻松访问来自其他班级。我尝试了一些使用返回方法等方法,但我很好奇,如果有任何简单的方法来做到这一点。帮助表示赞赏!
答
此代码创建一个类,并且在特殊的__init__
方法中,它将值分配给各种成员变量。
class Player(object):
def __init__(self, image):
self.x = 100
self.y = 240
self.health = 30
self.defense = 25
self.image = image
self.black = (0, 0, 0)
self.draw()
这些成员变量也被称为属性在Python。如果你有一个Player实例的引用(Player类的一个实例):
p = Player()
您可以访问属性所有你喜欢:
print(p.health)
也许你需要某种形式的“主循环“或控制器类,可以访问玩家和敌人,并可以相应地设置其属性:
class MainLoop(object):
def __init__(self):
self.player_1 = Player()
self.enemy_1 = Enemy()
def run(self):
if fight(): # fight() is some function of your game
self.player_1.health -= 10
self.enemy_1.health -= 20
这些不是”类变量“。您的标题有误导性。 “来自另一个班级的变量”是可以的。 – zvone
您需要制作这些类的实例,并确保它们是公共的(这会使它们受到编辑)或私有的,这些封装它们并使它们对外部范围不可变。你需要方法来返回这些值,如果它们是私人的 –
通常会有一个对象来处理整个游戏。我们称之为“游戏”。它可以访问'self.player = Player()'和'self.enemy = Enemy()'。然后很简单...'game.enemy.health' – zvone