Python - 在另一个文件中调用类中的定义

时间:2018-02-14 03:42:40

标签: python

我目前正在研究一个简单的回合制游戏的框架。我试图在一个类中调用一个定义在一个单独的文件中。我从中导入moveset文件的程序叫做Pymon_Movesets。我将它导入Pymon_Main文件。两者的代码看起来有点像......

(的 Pymon_Moveset

class normaltype():

    def scratch():
        type = normal
        slot = 1
        # Base normal type move
        damage = 2 * level/2

Pymon_Main

From Pymon_Movesets import *

def Initialize():
    Scratch = Pymon_Movesets.normaltype.scratch()
    Bite = Pymon_Movesets.normaltype.bite()

我的错误

 File "C:\Users\samsc\Desktop\Pymon\Pymon_main.py", line 2, in <module>
     from Pymon_Movesets import *   File "C:\Users\samsc\Desktop\Pymon\Pymon_Movesets.py", line 3, in <module>
     import Pymon_main   File "C:\Users\samsc\Desktop\Pymon\Pymon_main.py", line 110, in <module>
     gamefunction.Initialize()   File "C:\Users\samsc\Desktop\Pymon\Pymon_main.py", line 26, in Initialize
     Scratch = Pymon_Movesets.normaltype.scratch() AttributeError: module 'Pymon_Movesets' has no attribute 'normaltype' The program
 '[4908] python.exe' has exited with code -1073741510 (0xc000013a).

我正在使用Visual Studios Python编辑器。

感谢您的时间

2 个答案:

答案 0 :(得分:0)

您正在将Pymon_Moveset.py的所有内容导入当前命名空间,但是,您仍然使用文件名调用该类。此外,您需要在调用方法之前创建类的实例。最后,您需要在方法签名中包含self,因此它绑定到类:

在Pymon_Movesets中:

class normaltype():

   def scratch(self):
      type = normal
      slot = 1
     # Base normal type move
      damage = 2 * level/2

在主文件中:

import Pymon_Movesets
def Initialize():
   Scratch = Pymon_Movesets.normaltype().scratch()
   Bite = Pymon_Movesets.normaltype().bite()

但是,如果要使用类的名称而不是实例来访问类中的方法,请使用staticmethod

Pymon_Moveset.py

class normaltype():
   @staticmethod
   def scratch():
      type = normal
      slot = 1
    # Base normal type move
      damage = 2 * level/2

答案 1 :(得分:0)

由于您正在执行from Pymon_Movesets import *,因此如果它是模块级/文件级函数,则无需使用Pymon_Movesets来调用其normaltype函数。

from Pymon_Movesets import *

def Initialize():
    Scratch = normaltype.scratch()
    Bite = normaltype.bite()