Python,涉及定义一个类

时间:2014-04-18 20:33:38

标签: python class methods

我想解决这个问题:

写出包含以下内容的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'",)

有人可以帮我吗?拜托,谢谢你。

3 个答案:

答案 0 :(得分:3)

一个是将字符串传递给set_winner。这就是你看到错误的原因。

但是,您不需要在Python中创建set_winnerget_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