我正在尝试制作类似于MMORPG的游戏但是单人游戏。我试图将Player类放在一个脚本,MaelstromPlayer和它的子类MaelstromMove上,使用另一个脚本连接到它,因为我很快就会添加MaelstromBattle和MaelstromInv类。
问题是我无法访问MaelstromPlayer类属性,更不用说调整了。我想知道是什么导致了这个问题以及如何解决它,或者即使这是可能的。
如果你想知道,我得到了"在多个文件中分发类的方法"来自这个网站https://mail.python.org/pipermail/python-list/2012-January/618880.html。
这是我的MaelstromPlayer代码,我存储父类的文件。
class Player(object):
def __init__(self):
self.place = int("001")
self.name = input("What name do you want?")
self.knownplaces={}
self.knownplaces[int("001")]="Ruby City"
self.knownplaces[int("002")]="Ruby Inn"
self.knownplaces[int("003")]="Ruby Forests"
self.knownplaces[int("004")]="Ruby Countryside"
self.knownplaces[int("005")]="Witch Hideout"
self.mode="moving"
def __str__(self):
rep = self.movepossible
这是我的MaelstromMove代码,我存储了PlayerMove的子类。
import sys
sys.path.append('F:\Maelstrom\Python\MaelstromPlayer.py')
from MaelstromPlayer import Player
class PlayerMoving(Player):
def __init__(Player):
print('Welcome')
def movepossible(Player,position):
#001--Ruby City
#002--Ruby Inn
#003--Ruby Forests
#004--Ruby Countryside
#005--Witch Hideout
if position==int("001"):
possible=[int("002"),int("003")]
return possible
elif position==int("002"):
possible=[int("001")]
return possible
elif position==int("003"):
possible=[int("001"),int("004")]
return possible
elif position==int("004"):
possible=[int("001"),int("003"),int("005")]
return possible
elif position==int("005"):
possible=[int("004")]
return possible
else:
return null
def move(Player,position):
if Player.mode=="moving":
position=int(position)
possiblewords=[]
print('Choose between paths:')
possible = Player.movepossible(position)
for m in range(0,len(possible),1):
possiblewords.append(Places.knownplaces[possible[m]])
for n in range(0,len(possiblewords),1):
print(str(n+1)+':'+str(possiblewords[n]))
choice=input('Make your choice...')
#choice=int(choice)
if choice == '':
choice = int('9999999999')
if int(choice) <= len(possiblewords):
Player.place=possible[int(choice)-int('1')]
print("\n")
print("\n")
def showposition(Player):
print('You are at '+Player.knownplaces[int(Player.place)])
test = Player()
while True:
place = test.place
test.move(place)
test.showposition()
sys.path方法来自:http://www.daveoncode.com/2017/03/07/how-to-solve-python-modulenotfound-no-module-named-import-error/。
请帮助,最好带代码示例,谢谢。
答案 0 :(得分:0)
你的问题是你永远不会调用PlayerMoving
类(对于你底部的测试),只调用Player
类。同样在PlayerMoving
班级中,您可以覆盖Player
类'__init__
方法。要确保仍然调用Player.__init__
,请执行以下操作:
class PlayerMoving(Player):
def __init__(self):
print('Welcome')
super().__init__()
一些其他问题:
int("001")
,这是低效的,毫无意义的,只是不好的做法。dict
做self.knownplaces = {1: "Ruby City", 2: "Ruby Inn", ...} # etc
null
未在python中定义,也许您的意思是None
但如果您不返回任何其他内容,则会自动return None
。while
循环永远不会结束。放入break
子句或其他内容。Player
作为第一个方法参数。就像你在每个python类示例1 2 3 4 5中找到的那样使用self
。最后,您是否注意到来自https://mail.python.org/pipermail/python-list/2012-January/618880.html的整个帖子是关于您应该从不这样做的?