类方法问题

时间:2016-11-30 17:43:29

标签: python class methods

我必须创建一个这种类型的颜色

class Color:
    def __init__(self, r, g, b):
        self.r = r
        self.g = g
        self.b = b

我必须创建这些方法:

-createatuple()返回对象颜色的元组(r,g,b)

-mixture(f)返回颜色的新实例,其值是当前实例与颜色f的混合

我试过这个

>>>class Color:
       def __init__(self, r, g, b):
           self.r = r
           self.g = g
           self.b = b
       def createatuple(self):
           return (self.r, self.g, self.b)
       def mixture(self, f):
           self.r = int((self.r+f.r)/2)
           self.g = int((self.g+f.g)/2)
           self.b = int((self.b+f.b)/2)
           return self.r
           return self.g
           return self.b

>>>color1 = Color(10,15,10)
>>>color1.createatuple()
(10,15,10)
>>>color2 = Color(20,5,200)
>>>color2.createatuple()
(20,5,200)

如果我想这样做:

>>>color1.mixture(color2).createatuple()
(15,10,105)

但我收到" ' STR'对象没有属性' createatuple()' "

出了什么问题?

2 个答案:

答案 0 :(得分:1)

您的mixture方法没有制作新实例。它只返回self.r值(return的多次使用不做任何事情;第一个结束方法)。我发现你没办法制作str;您的示例代码中没有str个。据推测,你想要mixture

这样的东西
def mixture(self, f):
    # For subclassing friendliness, you might construct via:
    # type(self)(...) instead of Color(...)
    return Color((self.r + f.r) // 2, (self.g + f.g) // 2, (self.b + f.b) // 2)

答案 1 :(得分:0)

我不确切地知道mixture应该做什么,但无论如何,你里面有3个return语句。请注意,以return开头的行结束整个方法,返回值。

因此,在您的情况下,您总是返回self.r,这意味着,在实践中,您正在执行self.r.createtuple()。但是,self.r显然没有此方法,因为它不是Color