【问题标题】:python Beginner : classpython初学者:类
【发布时间】:2016-01-19 02:53:27
【问题描述】:

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

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()

【问题讨论】:

  • 请编辑您的问题以指出它的实际问题。就像猜测一样,您的缩进看起来不正确。
  • 欢迎来到 Stack Overflow。我已经使用前导标记了错误 >

标签: python-3.x


【解决方案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,2 或 3)并根据他们的选择输出分配给它的颜色
  • 你在你的课堂之外做这件事,你的课堂不应该包含这样的逻辑,它应该只是一个你操作的容器。
【解决方案2】:

从我阅读您的代码的方式来看,您似乎正在尝试使您的 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:老派的 getter/setter:

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'

希望有帮助!

【讨论】:

    【解决方案3】:

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

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

    类是该类的实例的蓝图或价值和功能计划以进行扩展。例如,您需要说:

    NissanLeaf = Automobile(2) 为了说你有一辆黑色日产聆风。

    那么,你可以去NissanLeaf.get_color(),看看这辆车确实是黑色的。

    Instance,换句话说,是一个以Class为蓝图的实际创作。为了看到一个对象的属性,它需要是一个实际的创造,而不仅仅是它的想法。

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

    例如:

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

    是蓝图和

    John = Human(27, 71)
    

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

    print John.age
    >>> 27
    

    检索数据。

    希望对你有帮助!!!

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2020-12-19
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多