类方法的问题

2024-05-16 18:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我必须创建这些方法:

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

-混合物(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()”

怎么了


Tags: 对象实例selfreturninit颜色defclass
2条回答

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

所以,在你的例子中,你总是返回self.r,这意味着,实际上,你在做self.r.createtuple()。然而,self.r显然没有这个方法,因为它不是一个Color

您的mixture方法没有生成新实例。它只返回self.r值(多次使用return不做任何事情;第一个结束方法)。我看不出你有什么办法;示例代码中没有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)

相关问题 更多 >