我试图从类中的选项中选择一个随机对象,并且我一直收到属性错误,我将提供我所拥有的代码的必要部分以及下面的具体错误:
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'"请让我知道如何解决这个问题!
答案 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
个对象:maleshirt1
,maleshirt2
和maleshirt3
。当您想要使用它们时,您必须知道它们的位置和名称,而不是向工厂询问它们。然后,您可以使用其名称“maleshirt1.explain()
等”使用它们。
当你向工厂询问他们(MaleShirt.maleshirt1()
)时工厂告诉你它不知道他们在哪里
类型对象'MaleShirt'没有属性'maleshirt1'
因为他们属于你。