【问题标题】:Calling class *simple code* [duplicate]调用类*简单代码* [重复]
【发布时间】:2017-05-26 22:02:38
【问题描述】:
class HouseLocation():

    def __init__(self,street_name,x,y):
        self.street_name=street_name
        self.x=x
        self.y=y

      def print_address():
          print '{}: {},{}'.format(street_name,x,y)

我假设代码非常简单并且可以自我解释我假设 现在我的问题是当我尝试运行它时

k=HouseLocation('lol lo', 3,7)

k.print_address()

我收到以下错误消息

Traceback(最近一次调用最后一次):

文件“”,第 1 行,在

k.print_address()

TypeError: print_address() 不带参数(给定 1 个)

谁能解释一下我做错了什么?

【问题讨论】:

  • self作为参数添加到方法中
  • 方法通过拥有它们的对象作为第一个参数。按照惯例,我们在 Python 中将其称为 self(但 def foobar_method(omg_its_me) 在语法上是有效的)。另请注意,street_namexy 未在 HouseLocation.print_address 中定义。由于方法将它们的所有者作为第一个参数,因此您可以使用它们的属性,但您必须这样引用它们! (self.street_name, self.x, self.y)

标签: python class


【解决方案1】:

请记住,方法隐式采用 self 参数。将方法代码改为:

  def print_address(self):
      print '{}: {},{}'.format(self.street_name,self.x,self.y)

【讨论】:

  • 赞成,因为您还解释了为什么
  • @dana,是的,忘记了。现已修复,谢谢。
【解决方案2】:

函数的第一个参数应该是self 参数。这是您的类实例,允许您相应地获取/设置属性。

class HouseLocation():

    def __init__(self,street_name,x,y):
        self.street_name=street_name
        self.x=x
        self.y=y

    def print_address(self):
        print '{}: {},{}'.format(self.street_name,self.x,self.y)

【讨论】:

    【解决方案3】:

    self 是这里缺少的参数。该函数需要至少有一个参数,其中一个参数是self,无论何时在一个类中:

    def print_address(self):
          print '{}: {},{}'.format(self.street_name,self.x,self.y)
    

    那么为了避免NameError,在变量前面加上self.

    【讨论】:

      【解决方案4】:

      您应该将self 传递给print_address()

      def print_address(self):
          print '{}: {},{}'.format(self.street_name, self.x, self.y)
      

      【讨论】:

        【解决方案5】:

        self是缺少的参数,它作为所有类方法的第一个参数传递。

        def print_address(self):
            print '{}: {},{}'.format(self.street_name,self.x,self.y)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-16
          • 2012-10-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多