【发布时间】:2019-10-25 19:24:34
【问题描述】:
我目前正在学习 Python。由于我是 OO(面向对象)编程的忠实粉丝,显然在 Python 中应用它并不难。但是当我尝试它时,它似乎与 C# 非常不同。
正如您在下面看到的,我正在尝试创建一个具有三个属性 Id、Hp 和 Mana 的角色类。分数是通过将 Hp 和 Mana 相加然后乘以 10 来计算的。
如您所见,在将 MyChar 定义为 id=10 hp=100 mana=100 之后,我期待 MyChar.Score 为 (100+100)*10,即 2000,但奇怪的是,它说:
bound method Character.Score of <__main__.Character object at 0x0000021B17DD1F60> 作为print(MyChar.Score) 的结果。
我该如何解决这个问题?
这是我的代码:
class Character:
def __init__(self, Id, Hp, Mana):
self.Id = Id;
self.Hp = Hp;
self.Mana = Mana;
def Score(self):
return (self.Hp + self.Mana)*10;
MyChar = Character(10, 100, 100);
print(MyChar.Score)
【问题讨论】:
-
分数不是一个属性而是一个成员函数,像 print(MyChar.Score()) 一样调用它
-
@Kunal 它可能不过。这在将函数/方法传递给高阶函数(如 map/filter)时特别有用。 :)
-
我发誓这种函数也称为方法,在 C# 中使用
()调用。 -
@KunalMukherjee 是的 -
MyChar.Score()表达式 first 解析MyChar对象上的"Score"属性(产生一个方法对象),then 在其上应用调用运算符(括号)。 -
@Goyo 您可能想了解一下 Python “方法”到底是什么:wiki.python.org/moin/FromFunctionToMethod - 作为一般规则,Python 的对象模型与 C# 的对象模型大不相同,所以虽然您会发现类、实例、属性、方法等相同的基本概念,您将不会与 C# 实现这些概念的方式进行 1:1 映射。
标签: python python-3.x