【问题标题】:member variable string gets treated as Tuple in Python成员变量字符串在 Python 中被视为元组
【发布时间】:2015-02-23 14:53:50
【问题描述】:

我目前正在 CodeAcademy 的帮助下学习 Python。我的问题可能与他们的 Web 应用程序有关,但我怀疑我在这里的基本层面上是错误的。

如果你想继续,我指的是 CodeAcademy.com -> Python -> Classes 6/11

我的代码如下所示:

class Car(object):
    condition = "new"
    def __init__(self, model, color, mpg):
        self.model = model,
        self.color = color,
        self.mpg = mpg

my_car = Car("DeLorean", "silver", 88)
print my_car.model
print my_car.color
print my_car.mpg
print my_car.condition

应该发生的是,对象my_car 的每个成员变量都会打印在屏幕上。我原以为 conditioncolormodel 会被视为字符串,但会被视为 Tuple

输出如下:

('DeLorean',) #Tuple
('silver',) #Tuple
88 
new #String
None

这会导致验证失败,因为 CA 需要“银”,但代码返回 ('silver',)

我的代码中的错误在哪里?

【问题讨论】:

  • 感谢您的提问。我教 Python,以及尾随的逗号问题。这是我第一次遇到有人犯这个错误的真实例子!谢谢。
  • 是的,很难忘记一个人对其他语言的了解。我经常写object = new class 只是因为我已经习惯了。我想在接下来的几周里,我会经常在句法混搭方面磕磕绊绊。

标签: python class


【解决方案1】:

您的构造函数中的这些属性后面有一个逗号。

删除它们,你会得到它没有元组

【讨论】:

  • 这些不是属性,只是属性。
【解决方案2】:

是的,您必须从实例变量中删除逗号。 from self.model = model, to self.model = model

很高兴看到,您使用的是 类变量 概念, “condition”是类变量,“self.model”、“self.color”、“self.mpg”是实例变量。

【讨论】:

    【解决方案3】:

    在您的__init__ 中,您有:

        self.model = model,
        self.color = color,
    

    这是您定义元组的方式。将行更改为

        self.model = model
        self.color = color
    

    没有逗号:

    >>> a = 2,
    >>> a
    (2,)
    

    >>> a = 2
    >>> a
    2
    

    【讨论】:

    • 就是这样 - 只是在 C# 和 Python 之间的某个地方的翻译中丢失了。干杯。解除锁定后将立即接受。
    • 所以,很简单。然而我因此迷路了
    • 这是我第二次遇到这个,为什么我这么笨
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多