尝试从类中随机选择对象时继续收到错误

时间:2016-11-08 03:40:08

标签: python class

我试图从类中的选项中选择一个随机对象,并且我一直收到属性错误,我将提供我所拥有的代码的必要部分以及下面的具体错误:

import random

#creating male shirt class
class MaleShirt():
    temp = ""
    style = ""

    def __init__(self, temp, style):
        self.temp = temp
        self.style = style
        return None

    #setters and getters
    def setTemp(self, temp):
        self.temp = temp

    def getTemp(self):
        return self.temp

    def setStyle(self, style):
        self.style = style

    def getStyle(self):
        return self.style

    def explain(self):
        print('Wear a', self.getStyle(), 'shirt when it is', self.getTemp(), 'outside')

#classifying shirts
maleshirt1 = MaleShirt('hot', 'boho')
maleshirt2 = MaleShirt('cold', 'preppy')
maleshirt3 = MaleShirt('hot', 'hipster')

#randomly choosing shirt (where I get the error)
choice = random.choice(MaleShirt.maleshirt1(), MaleShirt.maleshirt2(), MaleShirt.maleshirt3())
if choice == MaleShirt.maleshirt1():
    maleshirt1.explain()
if choice == MaleShirt.maleshirt2():
    maleshirt2.explain()
if choice == MaleShirt.maleshirt3():
    maleshirt3.explain()

我每次收到的属性错误都告诉我"输入对象' MaleShirt'没有属性' maleshirt1'"请让我知道如何解决这个问题!

2 个答案:

答案 0 :(得分:0)

我认为你对如何引用一个对象的实例感到困惑。

maleshirt1 = MaleShirt('hot', 'boho')

maleshirt1是一个实例

MaleShirt.maleshirt1()

必须是MaleShirt的类或静态方法。

你需要什么对象本身,即maleshirt1(和2和3) 所以改为做这个

choice = random.choice([maleshirt1, maleshirt2, maleshirt3])
if choice == maleshirt1:
    maleshirt1.explain()
elif choice == maleshirt2:
    maleshirt2.explain()
elif choice == maleshirt3:
    maleshirt3.explain()

你也可以用你的explain方法来打印字符串而不是元组。

def explain(self):
        print('Wear a %s shirt when it is %s outside' % (self.style, self.temp))

if语句实际上是不必要的,你只需要。

choice.explain()

由于random.choice返回的内容是MaleShirt,因此有explain方法。

答案 1 :(得分:0)

让我们假装一辆汽车的每个型号都有自己的工厂。所以我们有一个卡车,轿车和货车的工厂。工厂制造单独的汽车并将它们出售给您。当您想驾驶卡车时,不要去卡车工厂询问卡车的位置。你应该知道你的卡车在哪里。它就在你家门口。

这里的对象和类是一样的。你的MaleShirt班是汽车工厂。它会生成MaleShirt个对象。您“买了”了三个MaleShirt个对象:maleshirt1maleshirt2maleshirt3。当您想要使用它们时,您必须知道它们的位置和名称,而不是向工厂询问它们。然后,您可以使用其名称“maleshirt1.explain()等”使用它们。

当你向工厂询问他们(MaleShirt.maleshirt1())时工厂告诉你它不知道他们在哪里

  

类型对象'MaleShirt'没有属性'maleshirt1'

因为他们属于你。