我正在学习python中的类结构。想知道是否可以通过多种方法传递一个参数。
class Example(object):
def __init__(self, x):
self.x = x
def square(self):
return self.x**2
def cube(self):
return self.x**3
def squarethencube(y):
sq = Example.square(y)
cu = Example.cube(sq)
return cu
two = Example(2)
print(two.squarethencube())
错误在第10行; AttributeError:'int'对象没有属性'x'
目标是使用'squarethencube'方法将'2'传递给square(),即4.然后将'4'传递给cube()。所需的输出为'64'。显然,你可以用一种非常简单的方式编写一个函数来进行数学运算。这里的问题是如何使用多种方法。
我理解错误在于.x被作为属性分配到cube(sq)的输出上。我得到了相同的错误,但在第7行,我将参数更改为y(来自self.x)。
我在这里找到了类似的答案,但我需要一个更简单的解释。
答案 0 :(得分:3)
目前,square
和cube
是绑定到该类的方法;但是,您通过类名在squarethencube
中访问它们,但它们是方法,因此依赖于对实例的类的引用。因此,您可以创建该类的两个新实例,也可以使用classmethod
:
选项1:
class Example(object):
def __init__(self, x):
self.x = x
def square(self):
return self.x**2
def cube(self):
return self.x**3
def squarethencube(self, y):
sq = Example(y).square()
cu = Example(y).cube()
return cu
选项2:使用classmethod:
class Example(object):
def __init__(self, x):
self.x = x
@classmethod
def square(cls, x):
return x**2
@classmethod
def cube(cls, x):
return x**3
def squarethencube(self, y):
sq = Example.square(y)
cu = Example.cube(sq)
return cu
答案 1 :(得分:0)
class Example:
def __init__(self, x):
self.x = x
def square(self):
return self.x**2
def cube(self):
return self.x**3
def squarethencube(self):
return (self.x**2)**3
two = Example(2)
print(two.squarethencube())