python类和对象的新手

时间:2015-04-18 01:26:26

标签: python class object math

您好Ive现在只编写了大约3周的时间,我偶然发现了这段代码,当我把它放进去时它没有做任何事情。

class calculation(object):

def multiply(self, a=5, b=6):
    self.a = a
    self.b = b

我知道它很简单,但我仍然是编程新手,如果有人可以简单解释为什么这不起作用我真的很感激。感谢

2 个答案:

答案 0 :(得分:1)

由于缩进错误,它无法正常工作。缩进是Python知道def是一个类的方法而不是顶级的普通函数,它如何知道哪些行是循环的一部分以及循环结束的位置等等。你必须得到对的。但是你有这个:

class calculation(object):

def multiply(self, a=5, b=6):
    self.a = a
    self.b = b

因为def缩减回与class相同的级别,所以课程中没有任何内容。那不合法;每个复合语句(以:结尾的语句,如类定义)必须后跟缩进的内容。

最重要的是,multiply采用self参数的事实意味着它几乎可以肯定是某种类的方法。

所以,要解决它:

class calculation(object):

    def multiply(self, a=5, b=6):
        self.a = a
        self.b = b

现在,它有效。但它似乎没有做任何事情,是吗?

当然,你总是不可能复制整件事。或者无论你从哪里复制它,代码都是错误的并且缺少一条线。但是,让我们假设这对某人有用的代码来说确实很有用(除了缩进错误)。

首先,你所做的只是定义一个类。如果永远不创建该类的实例,更不用说调用它上面的任何方法,该类不做任何事情。但是,让我们假设您知道这一点,并且您知道如何创建实例并调用方法。 仍然似乎无能为力。

最有可能(再次,假设这是您实际要求的,并且您正确地复制了代码,并且......)这样做的是存储操作数以供稍后使用。

为什么你想要这样做的一个现实例子是在某种表达式树库中,每当它解析multiply时调用*,并逐渐建立复杂的表达式可能是简单的,也许你可以将表达式编译成C代码或对其进行代数转换。

但这对你来说可能听起来像是gobbledegook,所以这里有一个简单而又愚蠢的例子:

class calculation(object):

    def multiply(self, a=5, b=6):
        self.a = a
        self.b = b

table = []
for a in range(1, 5):
    row = []
    for b in range(1, 5):
        col = calculation()
        col.multiply(a, b)
        row.append(col)
    table.append(row)

print('Times table')
for row in table:
    for col in row:
        print('{} x {} = {}'.format(col.a, col.b, col.a * col.b))

答案 1 :(得分:0)

您的问题是class内的功能是错误的。尝试缩进。此外,对于multiply函数,您可能希望返回两个乘以的值:

class calculation(object):
    def multiply(self, a=5, b=6):
        self.a = a
        self.b = b
        return self.a * self.b