Python类混淆:如何打印函数返回的对象属性

时间:2016-11-04 01:30:33

标签: python

我是python 2.7的新手,刚进入课程。我在下面的“如何像计算机科学家一样思考:用Python学习”中编写了第13.2节的代码块

当我调用print_time函数从add_time函数打印返回的属性时,我收到以下错误:

Traceback (most recent call last):
File "13.py", line 49, in <module>
print_time(done_time)
File "13.py", line 10, in print_time
print time.hour,':',time.minute
AttributeError: Time instance has no attribute 'hour'

这是为什么?我是否需要明确告诉python要打印done_time类中的哪些属性?

class Time:
    pass

def print_time(time):
    print time.hour,':',time.minute

def time_add(t1, t2):
    time_sum = Time()
    time_sum.hours = t1.hour + t2.hour
    time_sum.minutes = t1.minute + t2.minute
    return time_sum

current_time = Time()
current_time.hour = 9
current_time.minute = 00

duration = Time()
duration.hour = 2
duration.minute = 30

done_time = time_add(current_time, duration)
print_time(done_time)

1 个答案:

答案 0 :(得分:1)

代码的整体结构有点奇怪。我假设根据你所遵循的书,这可能是故意的,以帮助教授在未来的道路上正确设计这个代码?无论哪种方式,问题实际上都是因为您混合了hourhours属性(minuteminutes也是如此)。我不确定这是你自己创建的代码,但是,从这里开始:

done_time = time_add(current_time, duration)

正在发生的事情是,您的time_add 功能正在返回包含Timehours属性的minutes对象。

您可以执行以下操作:

print_time(done_time)

其中,将您带到print_time 功能,然后尝试引用hourminute属性,您在done_timehours属性中明显没有这个属性{1}}。根据您之前的功能,您已按照说明分配了minutesprint_time。要立即解决您的问题,您的hours应该引用minutesdef print_time(time): print time.hours,':',time.minutes

nobel_winners = [
 {'category': 'Physics',
  'name': 'Albert Einstein',
  'nationality': 'Swiss',
  'sex': 'male',
  'year': 1921},
 {'category': 'Physics',
  'name': 'Paul Dirac',
  'nationality': 'British',
  'sex': 'male',
  'year': 1933},
 {'category': 'Chemistry',
  'name': 'Marie Curie',
  'nationality': 'Polish',
  'sex': 'female',
  'year': 1911}
]