蟒蛇;如何通过类

时间:2018-02-23 20:58:57

标签: python

我正在学习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)。

我在这里找到了类似的答案,但我需要一个更简单的解释。

2 个答案:

答案 0 :(得分:3)

目前,squarecube是绑定到该类的方法;但是,您通过类名在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())