python初学者:class

时间:2016-01-19 02:53:27

标签: python-3.x

有人可以帮助我/告诉我如何修复此代码吗? 我收到了一个错误:

  

TypeError:get_color()缺少2个必需的位置参数:'self'和'color'

class Automobile:
    def __init__(self, color):
        self.color = color

    def get_color(self, color):
        input("Enter number")
        if self.color == 1:
           print("white")

def main():
   Automobile.get_color()
main()

3 个答案:

答案 0 :(得分:1)

首先需要实例化类的对象。使用此功能,您可以拨打get_color()

auto = Automobile(1)
auto.get_color()

另请考虑将get_color重写为:

def get_color(self):
    if self.color == 1:
        return "white"
    else:
        return "none"

由于您当前的实施并没有真正完成您期望名为get_color的功能所做的事情。

答案 1 :(得分:1)

从我阅读代码的方式来看,您似乎正在尝试使get_x方法执行set_x方法通常所做的事情。另外,根据您的代码

if self.color == 1:
print(white)

我认为你想要将1映射为白色,然后将2映射为黑色,将3映射为蓝色,依此类推?

我先处理最后一部分。通常情况下,如果您想将某些内容映射到其他内容(在这种情况下,数字为颜色),最好使用字典:

color_dict = {1: 'white',
              2: 'black',
              3: 'etc.',}

然后,您可以通过编写

来调用(例如)白色
>>>print(color_dict[1])
'white'

现在,在课堂上,我将向您展示两种不同的方法来做我想做的事情。

选项A:Old-School getter / setters:

class Automobile:
def __init__(self, color):
    self.color_dict = {1: 'white',
                       2: 'black',
                       3: 'etc.',}

    self.color = self.color_dict[key]

def get_color(self):
    return self.color

def set_color(self, key):
    self.color = self.color_dict[color]

从此处开始,您可以致电:

>>>auto = Automobile(1)
>>>print(auto.get_color())
'white'
>>>auto.set_color(2)
>>>auto.print(auto.get_color())
'black'

这将很有效,我认为它可以做你想要的。

在python 3中有一个更新的方法,但是它使用装饰器(你会在一秒钟内看到它们以'@'开头,它们有点难以理解)

选项B:基于属性的新方法

class Automobile:
    def __init__(self, color):
        self.color_dict = {1: 'white',
                           2: 'black',
                           3: 'etc.',}

        self.color = color

    @property
    def color(self):
        return self._color

    @color.setter
    def color(self, key):
        self._color = self.color_dict[key]

这里的用法略有不同。它开始是一样的:

>>>auto = Automobile(1)
>>>print(auto.color)
'white'

但是,要更改颜色,而不是使用函数,可以使用=

修改属性
>>>auto.color = 2
>>>print(auto.color)
'black'

希望有所帮助!

答案 2 :(得分:0)

通过输入Automobile.get_color(),你告诉班级本身汽车告诉你它的颜色。

但是,Automobile作为一个班级没有颜色!

类是要扩展的类的实例的蓝图或值和函数计划。例如,您需要说:

NissanLeaf = Automobile(2) 为了说你有一只Black Nissan Leaf。

然后,你可以NissanLeaf.get_color()去发现汽车确实是黑色的。

实例,换句话说,是使用作为蓝图构建的实际创建。为了查看对象的属性,它需要是一个实际的创建,而不仅仅是它的想法。

您可以通过在类名后面添加括号,然后在括号中填入您在类的__init__函数中设置的任何参数来创建对象的实例。

例如:

class Human:
    def __init__(self, age, height):
        self.age = age
        self.height = height

是蓝图和

John = Human(27, 71)

是Human类的实例,我们可以从中

print John.age
>>> 27

检索数据。

希望有所帮助!!!