我在Python中编写自己的代码语言(称为Bean),我希望数学函数具有以下语法:
print math.add(3 + 7)
==→10
print math.mul(4 * 8)
==> 32
等等。到目前为止,我的代码是:
bean_version = "1.0"
console = []
print "Running Bean v%s" % bean_version
#Math Function
class math(object):
def __init__(self, add, sub, mul, div):
self.add = add
self.sub = sub
self.mul = mul
self.div = div
def add(self):
print self.add
math = math(1,0,0,0)
print math.add()
但是这会返回一个错误,说 TypeError:'int'对象不可调用。我可以将“添加”功能更改为其他名称,但它可以使用,但我想使用“添加”作为名称。
谢谢(顺便说一句,这是Python 2.7.10)
答案 0 :(得分:3)
对象不能具有两个具有相同名称的属性。因此,如果您有一个名为add
的属性,其中包含一个数字,它也可能还有一个名为add
的方法,因为方法只是碰巧保存函数的属性。当你这样做时:
this.add = add
您正在用该号码替换该方法。所以你需要使用不同的名称。
您说您希望能够拨打math.Add()
。但是您定义的方法是add
。它应该是:
def Add():
print this.add
这与保存该号码的add
属性不冲突,因为名称区分大小写。
答案 1 :(得分:2)
如果您不想更改添加功能的名称,则只需更改add
即可。这两个bean_version = "1.0"
console = []
print "Running Bean v%s" % bean_version
#Math Function
class math(object):
def __init__(self, add, sub, mul, div):
self.adds = add
self.sub = sub
self.mul = mul
self.div = div
def add(self):
print self.adds
math = math(1,0,0,0)
print math.add()
相互冲突。如果你运行它,你不会得到任何错误:
{{1}}