Python 如何正确初始化类

Python 如何正确初始化类,python,class,initialization,Python,Class,Initialization,对于python任务,我必须创建类并初始化它们。我正确创建了它们,但是自动分级器说它们没有正确初始化 使用构造函数和print_info()方法定义艺术家类以初始化艺术家的信息。默认情况下,构造函数应将艺术家的姓名初始化为“无”,并将出生和死亡年份初始化为0。print_info()应显示艺术家姓名,如果死亡年份为-1,则显示出生于XXXX,否则显示艺术家姓名(XXXX-YYYY) 使用构造函数和print_info()方法定义Artwork类以初始化Artwork的信息。默认情况下,构造函数应

对于python任务,我必须创建类并初始化它们。我正确创建了它们,但是自动分级器说它们没有正确初始化

使用构造函数和print_info()方法定义艺术家类以初始化艺术家的信息。默认情况下,构造函数应将艺术家的姓名初始化为“无”,并将出生和死亡年份初始化为0。print_info()应显示艺术家姓名,如果死亡年份为-1,则显示出生于XXXX,否则显示艺术家姓名(XXXX-YYYY)

使用构造函数和print_info()方法定义Artwork类以初始化Artwork的信息。默认情况下,构造函数应将标题初始化为“无”,创建年份初始化为0,艺术家应使用艺术家默认构造函数参数值

到目前为止,我所拥有的:

class Artist:
   def __init__(self, user_artist_name="None", user_birth_year=0, user_death_year=0):
       self.name = user_artist_name
       self.birth = user_birth_year
       self.death = user_death_year

   def print_info(self):
       if self.death == -1:
           print("Artist: {}, born {}".format(self.name, self.birth))
       else:
           print("Artist: {} ({}-{})".format(self.name, self.birth, self.death))


class Artwork:
   def __init__(self, user_title= "None", year_created=0, user_artist=Artist()):
       self.title = user_title
       self.year = year_created
       self.artist = user_artist

   def print_info(self):
       print("Title: {}, {}".format(self.title, self.year))


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)
   
   user_artist.print_info()

   new_artwork = Artwork(user_title, user_year_created, user_artist)

   new_artwork.print_info()
艺术家('Pablo Picasso',1881年,1973年)未能正确初始化艺术家。艺术家和艺术品的默认参数的构造函数都失败


我遗漏了什么?

看起来这个练习经历了多个变量更新,他们忘记了更新很多init值的模板。无论如何,这应该很好

main.py 艺术家派伊 Artwork.py
经历了同样的任务,遇到了不同的问题。我得到一个错误:“回溯(最近一次呼叫): 文件“main.py”,第37行,在 新作品。打印信息() AttributeError:“Artwork”对象没有“print\u info”属性

我在几个不同的地方调用print_info(),为什么在最后一个实例中它失败了

我的“def print_info(self)”功能是否存在需要修复的问题

谢谢

我的代码:

from Artist import Artist
from Artwork import Artwork

class Artist:
    def __init__(self, name="None", birth_year=0, death_year=0):
        self.name = name
        self.birth_year = birth_year
        self.death_year = death_year

def print_info(self):
    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))

class Artwork:
    def __init__(self, user_title="None", year_created=0, user_artist=Artist()):
        self.title = user_title
        self.year_created = year_created
        self.artist = user_artist

def print_info(self):
    self.artist.print_info()
    print('Title: %s, %d' % (self.title, self.year_created))

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

你的代码看起来很好!与教授取得联系。也许他们的意思是“
print_info()
应该显示艺术家姓名,如果死亡年份为0,则出生于XXXX”我试过
a=Artist('Pablo Picasso',1881,1973)
然后
a.print_info()
,效果很好。为什么您认为它不起作用?不要使用默认值
user\u artist=artist()
。请参阅提供预期的。显示中间结果与您预期的不同之处。我们应该能够复制和粘贴一个连续的代码块,执行该文件,并再现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和期望的输出来测试我们的建议。请参考发布指南并完成发布:您的发布必须是独立的。场外链接是不可接受的。您有几个人试图猜测您的问题需求。这可能适用于帮助站点,但不适合堆栈溢出。您是在回答问题,还是在发布自己的其他问题?请阅读SO关于如何回答问题的指南。
class Artist:
def __init__(self, name="None", birth_year=0, death_year=0):
    self.name = name
    self.birth_year = birth_year
    self.death_year = death_year

def print_info(self):
    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))
from Artist import Artist 

class Artwork:
def __init__(self, user_title="None", year_created=0, user_artist=Artist()):
    self.title = user_title
    self.year_created = year_created
    self.artist = user_artist

def print_info(self):
    self.artist.print_info()
    print('Title: %s, %d' % (self.title, self.year_created))
from Artist import Artist
from Artwork import Artwork

class Artist:
    def __init__(self, name="None", birth_year=0, death_year=0):
        self.name = name
        self.birth_year = birth_year
        self.death_year = death_year

def print_info(self):
    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))

class Artwork:
    def __init__(self, user_title="None", year_created=0, user_artist=Artist()):
        self.title = user_title
        self.year_created = year_created
        self.artist = user_artist

def print_info(self):
    self.artist.print_info()
    print('Title: %s, %d' % (self.title, self.year_created))

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