我正在尝试为游戏创建角色生成向导。在一个类中,我计算角色的属性。在另一个类中,我根据角色的属性向用户显示哪些专业可用。但是,我不记得如何在不同的类之间传递变量。
这是我的例子:
class BasicInfoPage(wx.wizard.WizardPageSimple):
def __init__(self, parent, title):
wiz.WizardPageSimple.__init__(self, parent)
self.next = self.prev = None
self.sizer = makePageTitle(self, title)
<---snip--->
self.intelligence = self.genAttribs()
class MOS(wx.wizard.WizardPageSimple):
def __init__(self, parent, title):
wiz.WizardPageSimple.__init__(self, parent)
self.next = self.prev = None
self.sizer = makePageTitle(self, title)
def eligibleMOS(self, event):
if self.intelligence >= 12:
self.MOS_list.append("Analyst")
问题是我不知道如何使用从 BasicInfoPage 类到 MOS 类的“智能”变量。我已经从 Internet 上尝试了几种不同的方法,但似乎没有任何效果。我错过了什么?
编辑 发布后我意识到我没有很好地解释它。我正在尝试创建 1980 年代 Twilight 2000 RPG 的计算机版本。
我正在使用 wxPython 创建一个向导;我的类的父类是来自 wxPython 的向导。该向导将引导用户创建角色,因此“基本信息”页面(BasicInfoPage 类)允许用户提供角色的名称并“滚动”角色的属性。这就是“ self 智能”的来源。
我正在尝试将为她创建的属性用于向导中进一步的页面,用户可以在该页面中选择角色的特性。可用的专长取决于角色的属性,例如如果智力足够高,角色可以成为英特尔分析员。
我已经有好几年没有编程了,尤其是在 OOP 思想方面。这就是为什么我对如何使用类和方法创建本质上是全局变量感到困惑。
最佳答案
您可能混淆了“类”和“实例”。从你的例子中看不清楚,所以我假设你使用了很多类定义并且没有这些类的合适的对象实例。
类实际上没有可用的属性值。类只是对象集合的一组通用定义。您应该将类视为定义,而不是实际事物。
类的实例,“对象”,是具有实际属性值和执行方法功能的实际事物。
您不会在类 之间传递变量。您在实例 之间传递变量。实际上,只有实例变量很重要。 [是的,有类变量,但它们是相当专业且经常令人困惑的东西,最好避免。]
当你创建一个对象(一个类的实例)时
b= BasicInfoPage(...)
那么b.intelligence
就是BasicInfoPage
的b
实例的intelligence值。
一个很常见的事情是
class MOS( wx.wizard.PageSimple ):
def __init__( self, parent, title, basicInfoPage ):
<snip>
self.basicInfo= basicInfoPage
现在,在 MOS 方法中,您可以说 self.basicInfo.intelligence
,因为 MOS 有一个 BasicInfoPage 对象可用。
当您构建 MOS 时,您为其提供它应该使用的 BasicInfoPage 实例。
someBasicInfoPage= BasicInfoPage( ... )
m= MOS( ..., someBasicInfoPage )
现在,对象 m
可以检查 someBasicInfoPage.intelligence
关于类之间的 Python 传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/113341/