Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 定义;加上「;类中的函数_Python_Python 2.7 - Fatal编程技术网

Python 定义;加上「;类中的函数

Python 定义;加上「;类中的函数,python,python-2.7,Python,Python 2.7,我正在用Python编写自己的代码语言(称为Bean),我希望数学函数具有以下语法: 打印数学。添加(3+7) =>10 打印数学.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):

我正在用Python编写自己的代码语言(称为Bean),我希望数学函数具有以下语法:

打印数学。添加(3+7)
=>10

打印数学.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)

如果您不想更改add函数的名称,您可以只更改
self.add
。这两个
add
s相互冲突。如果运行以下操作,则不会出现任何错误:

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()

一个对象不能有两个同名的属性。因此,如果您有一个名为
add
的属性来保存一个数字,那么它就不能有一个名为
add
的方法,因为方法只是碰巧保存函数的属性。当您这样做时:

this.add = add
您正在用该数字替换该方法。所以你需要使用不同的名字

您说希望能够调用
math.Add()
。但是您定义的方法是
add
。应该是:

def Add():
    print this.add

这与保存数字的
add
属性没有冲突,因为名称区分大小写。

命名约定非常有问题。Add是一个参数和一个函数,你说你想要
math.Add()
,但是你调用了
math.Add()
。为什么
add()
方法没有像您的示例那样接受参数?
math.add(4*8)
-什么?那不是加法。这个
数学有什么意义呢?如果你打算使用常规的
+
*
操作符,那么就添加
东西?@Barmar在类中,这就是你定义函数的方式。