python - 'int' 对象没有属性 - 通过 __call__ 传递给类中的方法
问题描述
这是什么:一个类用于控制 NPC 和玩家的游戏角色统计和交互。
添加了调用方法以创建新的“生物类型”,可以根据玩家级别控制其统计缩放。
我正在尝试使用 Mob.wyvern(player_level) 方法来创建一个“Wyvern”类型的 NPC。在这种情况下,代码会成功运行,直到我们尝试使用 self.playerlevel 调用修改 a_wyvern.life。
错误:
Traceback (most recent call last):
File "c:\Users\User\mystuff\Classes Game\Characters.py", line 74, in <module>
a_wyvern = Mobs.wyvern(player_level)
File "c:\Users\User\mystuff\Classes Game\Characters.py", line 36, in wyvern
a_wyvern.life += a_wyvern.player_level
AttributeError: 'Mobs' object has no attribute 'player_level'
#Initializer, passing variables to all
class Mobs():
def __init__(self):
self.life = 10
self.atk = 2
self.arm = 1
self.name = villains.gen()
self.playername = heroes.gen()
self.type = type
def __call__(self, player_level):
self.player_level = player_level
pass
def attack(self, enemy):
damage_amount = enemy.take_damage(self.atk)
return damage_amount
def take_damage(self, amount):
damage_amount = (amount - self.arm)
self.life -= damage_amount
return damage_amount
def wyvern(self):
a_wyvern = Mobs()
a_wyvern.type = "Wyvern"
a_wyvern.life += self.player_level
return a_wyvern
player_level = 20
a_wyvern = Mobs.wyvern(player_level)
a_wyvern.type
a_wyvern.life
a_wyvern.atk
print(a_wyvern.life)
print(a_wyvern.atk)
print(a_wyvern.name)
解决方案
据我所知,您对通话有错误的想法。创建类的实例后,将在__call__
运行时像函数一样调用该实例。例子:
>>> class A:
def __init__(self, A):
print('A', A)
def __call__(self, B):
print('B', B)
>>> a = A(5)
A 5
>>> a(4)
B 4
呼叫永远不会在您的场景中实际运行。相反,您绕过__init__
and__call__
来运行一个单独的初始化函数wyvern
.
这里的问题是两件事之一。首先, call 永远不会运行,尽管它对's的执行至关重要。wyvern
其次,您将一个整数传递给wyvern
. self
是一个函数变量,它会自动被运行每个函数的类的实例替换。整数是一个不同的类,它没有一个名为 的内部变量player_level
。
总而言之,你的类初始化搞砸了,这给你带来了一堆错误
推荐阅读
- angularjs - 使用 ng-select 选择选项的问题,因为 ng-model 值不同
- tensorflow - 多个 GPU 上的批量大小
- java - 代码没有运行的原因是什么?
- javascript - 是否有多个特定字符串的 GraphQL 类型?
- swift - 无法在 NavigationBar 中设置自定义大标题
- spring - 使用 Spring Logback 在不同路径中配置 Kubernetes 日志
- c# - 在方法中选择属性的 C# 问题
- amazon-web-services - 如何创建限制资源的 AutoScaling IAM 角色?
- python - 如何在python的n行中随机输入无输入
- node.js - 有没有办法运行 nodemon 和 ng serve ?