python - python将classB中的方法作为参数传递给classA,然后从传递的classB方法中调用classA中的方法
问题描述
我知道标题听起来令人困惑,但请耐心等待。我正在编写我的第一个游戏,我正在尝试为 AI 设置一个类(称为 AI_mode),我的 obj_creature 类可以使用它来获得生物实体需要的任何类型的 AI。我将 AI_mode 中的方法作为变量传递给 obj_creature。从 AI_mode 传递给 obj_creature 的方法从 obj_creature 类内部调用另一个方法。继承人一些精简的代码:
class obj_creature:
def __init__(self, npc_mode=None):
self.npc_mode=npc_mode
def move(self, word):
print(word)
class AI_mode:
def ai_move_left(self):
self.owner.move("Hello World")
enemy_ai=AI_mode().ai_move_left
enemy_creature=obj_creature(npc_mode=enemy_ai)
if enemy_creature.npc_mode:
enemy_creature.npc_mode()
此代码给出了错误:
self.owner.move("Hello World")
AttributeError: 'AI_mode' object has no attribute 'owner'
我很确定 .owner() 不是在那里使用的正确东西,因为我从未将 obj_creature 声明为所有者,但我不确定在它的位置使用什么。当我尝试像这样将 obj_creature 声明为 AI_mode 的所有者时:
class obj_creature:
def __init__(self, npc_mode=None):
self.npc_mode=npc_mode
if npc_mode:
npc_mode.owner=self
我收到此错误:
npc_mode.owner=self
AttributeError: 'method' object has no attribute 'owner'
我的最终目标是使将来自同一类的各种 AI 分配给任何种类的生物变得容易,并且以后能够使用相同的命令调用分配给它的任何 AI
解决方案
找到下面的代码设计:
class obj_creature:
def __init__(self, npc_mode=None):
self.npc_mode=npc_mode
def move(self, word):
print(word)
class AI_mode:
def __init__(self, owner):
self.owner = owner
def ai_move_left(self):
self.owner.move("Hello World")
enemy_creature=obj_creature()
enemy_ai=AI_mode(enemy_creature)
enemy_creature.npc_mode=enemy_ai.ai_move_left
if enemy_creature.npc_mode:
enemy_creature.npc_mode()
推荐阅读
- qemu - libvirt 无法打开符号链接映像
- javascript - 为 contenteditable html 选项取消 btn
- extjs - 为我的视图实现路由系统(ExtJS)
- html - 导航栏菜单列表不会出现在响应式上
- matlab - MathNET.Numerics 中 Matlab sortrows() 的等效功能?
- python - 带有while循环和中断的Python函数以查找连续计数
- snowflake-cloud-data-platform - Snowflake 的 split_part 功能有限制吗?
- java - 由于开销,此并发代码是否较慢?还是有别的东西在起作用?
- python - Heroku Django Admin 在 /admin/projects/project/add/ 处返回“FileNotFoundError”?
- sql - 错误执行 (4: 8): ORA-00907: 缺少右括号