我想解决这个问题:
写出包含以下内容的ContestResult类的定义:
•String类型的实例变量获胜者,初始化为空String。
•String类型的实例变量second_place,初始化为空String。
•String类型的实例变量third_place,初始化为空String。
•一个名为set_winner的方法,它有一个参数,其值分配给实例变量获胜者。
•一个名为set_second_place的方法,它有一个参数,它的值分配给实例变量second_place。
•一个名为set_third_place的方法,它有一个参数,它的值分配给实例变量third_place。
•一个名为get_winner的方法,它没有参数,并返回实例变量获胜者的值。
•一个名为get_second_place的方法,它没有参数,并返回实例变量second_place的值。
•一个名为get_third_place的方法,它没有参数,并返回实例变量third_place的值。
这是我的代码:
class ContestResult():
def __init__(self):
self.winner= ""
self.second_place= ""
self.third_place= ""
def set_winner(self,value):
self.winner= value.set_winner
def set_second_place(self,value):
self.second_place= value_set_second_place
def set_third_place(self,value):
self.third_place= value.set_third_place
def get_winner(self):
return self.winner
def get_second_place(self):
return self.second_place
def get_third_place(self):
return self.third_place
我收到此错误:
Exception occurred(<class 'AttributeError'>, AttributeError("'str' object has no attribute 'set_winner'",)
有人可以帮我吗?拜托,谢谢你。
答案 0 :(得分:3)
一个是将字符串传递给set_winner
。这就是你看到错误的原因。
但是,您不需要在Python中创建set_winner
和get_winner
函数。所有对象的成员变量(在本例中为winner,second_place和third_place)都是公共可访问的。如果你真的想拥有mutators和accessors,那么Pythonic这样做的方法是使用property
:
class ContestResult(object):
def __init__(self):
self.__winner = ''
@property
def winner(self):
return self.__winner
@winner.setter
def winner(self, value):
print "I'm about to set the value of winner"
self.__winner = value
现在当你想看到“赢家”属性时:
foo = ContestResult()
foo.winner = "Frank"
它就像常规成员变量一样。
答案 1 :(得分:2)
def set_winner(self,value)
中的,大概是value
是一个字符串,对吗?你为什么打电话给value.set_winner
?
self.winner = value
请注意,您的所有set_
都是如此。
答案 2 :(得分:0)
除非您尝试修改属性实际获取和设置的方式,否则您根本不需要使用Python。
class ContestResult(object):
def __init__(self, winner, second_place, third_place):
self.winner = winner
self.second_place = second_place
self.third_place = third_place
Stick = ContestResult("Foo", "Bar", "Eggs")
Stick.second_place #gets "Bar"
Stick.winner = "Clown" #sets Stick.winner
Python不是Java :)你不需要那些方法 - 再次,除非你要修改数据或装饰方法或东西。在这种情况下,您可以使用wheaties概述的@property
语法 - 这样做,仍实际上不会调用get
或{{1方法,你只需要以Pythonic方式进行交互并使用赋值。
set