python类和对象的新特性

2024-03-28 15:48:23 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我只写了大约3个星期,现在我偶然发现这个代码没有做任何事,当我把它。你知道吗

class calculation(object):

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

我知道它很简单,但我还是一个新的编程,如果有人能给一个简短的解释为什么这不工作,我真的很感激。谢谢


Tags: 代码selfobjectdef编程multiplyclasscalculation
2条回答

您的问题是class中的函数出现错误。试着缩进那个。另外,对于multiply函数,您可能希望返回两个相乘的值:

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

因为缩进错误,它不能工作。缩进是Python如何知道def是类上的一个方法而不是顶层的普通函数,如何知道哪些行是循环的一部分,循环的终点在哪里,等等。你必须把它弄对。但你有这个:

class calculation(object):

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

因为defclass返回同一级别,所以类中没有任何内容。这是不合法的;每个复合语句(以:结尾的语句,如类定义)后面都必须有缩进的内容。你知道吗

除此之外,multiply接受self参数的事实意味着它几乎可以肯定是某个类的方法。你知道吗

所以,要解决这个问题:

class calculation(object):

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

现在,它起作用了。但它似乎什么都没做,是吗?你知道吗

当然,总有可能你没有照搬整件事。或者,无论你从哪里复制它,代码都是错误的,而且漏了一行。但是让我们假设这确实是一个有用的函数,来自于某人的有用代码(除了缩进错误)。你知道吗

首先,你要做的就是定义一个类。如果从不创建该类的实例,更不用说对其调用任何方法,则该类不会执行任何操作。但假设您知道这一点,并且知道如何创建实例和调用方法。它似乎什么也没做。你知道吗

最有可能的情况是(同样,假设这是您实际要问的问题,并且您正确地复制了代码,并且……)这样做的目的是存储操作数以供以后使用。你知道吗

一个现实的例子说明了为什么你想这样做,那就是在某种表达式树库中,每当它解析一个multiply时,它就会调用*,然后逐渐地从简单的表达式中构建出复杂的表达式,也许这样你就可以把表达式编译成C代码或者对它进行代数转换。你知道吗

但你可能觉得这听起来像是胡言乱语,所以这里有一个简单但愚蠢的例子:

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

相关问题 更多 >