【问题标题】:Continuous error in module: TypeError: Artist() takes no arguments模块中的连续错误:TypeError:Artist() 不接受任何参数
【发布时间】:2021-03-21 16:12:31
【问题描述】:

完成一项作业,并尝试对类和模块进行多次更改,但我仍然收到错误消息,“TypeError:Artist() 不接受任何参数”。

作业指出: 在 Artist.py 中定义 Artist 类,使用构造函数初始化艺术家信息。默认情况下,构造函数应该将艺术家的名字初始化为“None”,并将出生和死亡的年份初始化为 0。

使用构造函数在 Artwork.py 中定义 Artwork 类以初始化艺术品的信息。默认情况下,构造函数应该将标题初始化为“None”,创建年份为 0,并且艺术家使用 Artist 的默认构造函数参数值。添加导入语句以导入 Artist 类。

将 import 语句添加到 main.py 以导入 Artist 和 Artwork 类。

例如:

如果输入是: 巴勃罗毕加索 1881 1973年 三位音乐家 1921

输出是: 艺术家:巴勃罗毕加索(1881-1973) 标题:三位音乐家,1921 年

如果输入是: 布莱斯·马登 1938

遥远的缪斯 2000

输出是: 艺术家:布莱斯·马登,生于 1938 年 标题:遥远的缪斯,2000

我的代码:

class Artist:

   def __init__(self, name ="None", birth_year = 0, death_year = 0):
       """
       Constructor to initialize the name, birth_year and death_year to specified values
       default of "None", 0 and 0 respectively
       """
       self.name = name
       self.birth_year = birth_year
       self.death_year = death_year
  
   def print_info(self):
       """
       Function to display the information of the Artist
       """
       if self.death_year == -1:
           print('Artist: {}, born {}'.format(self.name, self.birth_year))
       else:
           print('Artist: {} ({}-{})'.format(self.name, self.birth_year, self.death_year))
      
 #end of Artist.py     

from Artist import Artist
class Artwork:

   def __init__(self, title = "None", year_created = 0, user_artist = Artist()):
       """
       Constructor to initialize the title, year_created and artist to specified values
       default of "None", 0 and default artist respectively
       """
       self.title = title
       self.year_created = year_created
       self.artist = user_artist
  
    def print_info(self):
       """
       Function to display the information of the Artwork
       """
       self.artist.print_info() # display the information for Artist
       print("Title: %s, %d" % (self.title, self.year_created))
  
#end of Artwork.py     

from Artist import Artist
from Artwork import Artwork  

if __name__ == "__main__":
   user_artist_name = input()
   user_birth_year = int(input())
   user_death_year = int(input())
   user_title = input()
   user_year_created = int(input())

   user_artist = Artist(user_artist_name, user_birth_year, user_death_year)
   new_artwork = Artwork(user_title, user_year_created, user_artist)
   new_artwork.print_info()

   #end of main.py  

ERROR:
Traceback (most recent call last):
  File "main.py", line 54, in <module>
    user_artist = Artist(user_artist_name, user_birth_year, user_death_year)
TypeError: Artist() takes no arguments

【问题讨论】:

  • 请提供预期的MRE - Minimal, Reproducible Example。显示中间结果与预期结果的偏差。我们应该能够将您的代码块粘贴到文件中,运行它并重现您的问题。这也让我们可以在您的上下文中测试任何建议。您发布的程序挂起等待输入。不要指望我们提供测试数据:只需将您的 input 替换为引发问题的测试用例即可。
  • 使用完全相同的设置,它适用于我。您是否在其他地方定义了Artist
  • 你用的是什么版本的python?
  • 你把这些都放在一个文件里了吗?错误说它在第 54 行,这很奇怪。我已经尝试将每个复制到自己的文件中,它运行正常。
  • 我们还希望您在错误点之前跟踪可疑值。您对他们如何获得这些价值观感到困惑?特别是,此时Artist 是什么?也打印它的类型和值。

标签: python class module


【解决方案1】:

对我来说很好,请确保你的代码有正确的缩进,这可能是一个缩进问题。

【讨论】:

    【解决方案2】:

    所有这些都需要在嵌入式解释器中各自的文件中处理。确保单击下拉菜单并选择并填写 3 个文件,main.py、artist.py 和artifact.py。

    我很笨。

    如果你把它放在正确的地方,代码就可以工作。

    【讨论】:

    • 如果这是一个简单的用户错误案例,那么这个问题不太可能对未来的访问者有帮助,所以最好的解决办法可能就是删除它。
    【解决方案3】:

    我可以解决你的问题。像 [init] 一样在 init 之前加上双下划线(__) 但如果你写 [init] 会出错。所以,正确代码并编写 init 而不是 init

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 1970-01-01
      • 2014-01-22
      • 2016-12-01
      • 1970-01-01
      相关资源
      最近更新 更多