Python 依赖于类实例中的值
我是python新手,遇到了一个简单的问题: 下面是一个示例代码:Python 依赖于类实例中的值,python,class,random,instance,Python,Class,Random,Instance,我是python新手,遇到了一个简单的问题: 下面是一个示例代码: import random class shirt: def __init__(self, color, size, size_description): self.color = color self.size = size self.size_description = size_description def randomshirtsize(): rando
import random
class shirt:
def __init__(self, color, size, size_description):
self.color = color
self.size = size
self.size_description = size_description
def randomshirtsize():
randomshirtsize_ch = (
's',
'm',
'l'
)
return random.choice(randomshirtsize_ch)
def randomshirtdescription():
if randomshirtsize() == 's':
return 'small'
elif randomshirtsize() == 'm':
return 'medium'
elif randomshirtsize() == 'l':
return 'large'
else:
return 'Error! No valid size found'
shirt1 = shirt('blue', randomshirtsize(), randomshirtdescription())
print('Your shirt is size ' + shirt1.size + '. In other words ' + shirt1.size_description)
理论上,randomshirtdescription()应该与randomshirtsize()的输出匹配,但它是完全随机的。有人能帮我吗?
我还想继续使用我的类/实例方法,因为我的主代码要大得多,并且依赖于类和实例
编辑:这是Alihoseiny先生的新代码,但我仍然无法让它工作
import random
class shirt:
def __init__(self, color, size):
self.color = color
self.size = size
self.size_description = get_size_description()
def get_size_description(self):
if self.size == 's':
return 'small'
elif self.size == 'm':
return 'medium'
elif self.size == 'l':
return 'large'
else:
return 'Error! No valid size found'
def randomshirtsize():
randomshirtsize_ch = (
's',
'm',
'l'
)
return random.choice(randomshirtsize_ch)
shirt1 = shirt('blue', randomshirtsize())
print('Your shirt is size ' + shirt1.size + '. In other words ' + shirt1.size_description)
当我运行它时,会出现以下错误:
NameError:name'get\u size\u description'未定义
randomshirtsize
每次调用时都会创建一个随机输出,因此当您想在randomshirtdescription
中使用它时,应该将它的值存储到局部变量中,并在if
语句中使用该变量的值。像这样:
def randomshirtdescription():
random_size = randomshirtsize()
if random_size == 's':
return 'small'
elif random_size == 'm':
return 'medium'
elif random_size == 'l':
return 'large'
else:
return 'Error! No valid size found'
class shirt:
def __init__(self, color, size):
self.color = color
self.size = size
self.size_description = self.get_size_description()
def get_size_description(self):
if self.size == 's':
return 'small'
elif self.size == 'm':
return 'medium'
elif self.size == 'l':
return 'large'
else:
return 'Error! No valid size found'
编辑
如果进行了上述更改,则函数可以正常工作,但在与类一起使用时,它们的行为是不正确的。我认为最好改变一下
我认为最好将randomshirtdescription
函数更改为返回给定衬衫尺寸描述的函数。大概是这样的:
def shirtdescription(shirt_size):
if shirt_size == 's':
return 'small'
elif shirt_size == 'm':
return 'medium'
elif shirt_size == 'l':
return 'large'
else:
return 'Error! No valid size found'
现在,通过以下方式调用类和函数,您可以从代码中获得预期的结果:
random_size = randomshirtsize()
shirt1 = shirt('blue', random_size, randomshirtdescription(random_size))
但是,这种解决方案仍然不是面向对象的。我认为最好将这个新的shirtdescription
转换为shirt
类的方法
我认为更好的课程应该是这样的:
def randomshirtdescription():
random_size = randomshirtsize()
if random_size == 's':
return 'small'
elif random_size == 'm':
return 'medium'
elif random_size == 'l':
return 'large'
else:
return 'Error! No valid size found'
class shirt:
def __init__(self, color, size):
self.color = color
self.size = size
self.size_description = self.get_size_description()
def get_size_description(self):
if self.size == 's':
return 'small'
elif self.size == 'm':
return 'medium'
elif self.size == 'l':
return 'large'
else:
return 'Error! No valid size found'
问题是您在
shirt
类调用中调用了randomshirtsize()
,但随后在randomshirtdescription
中再次调用它。事实上,在这个函数中调用它三次。您要做的是运行一次randomshirtsize()
,并将这些结果传递到randomshirtdescription()
中,以便结果是静态的,而不是每次尝试比较值时都重新计算。这有意义吗?@brittenb回答这个问题,而不是发表评论?@dfundako呃,我宁愿让较低的众议员回答并获得选票,如下所示。@brittenb感谢您的快速回复。你是对的,这是有道理的。你能告诉我一种将结果从一个函数传递到另一个函数的方法吗?我尝试了下面Alihoseiny先生的方法,但没有成功:(感谢您的回复!不幸的是,即使使用您的解决方案,输出仍然是随机的。我需要更改代码中的其他内容吗?现在我发现我的解决方案中有一个错误,我删除了()在random_size ifelif
s.对代码进行更改后,如果仍然有错误,请在您的问题中添加一些错误输出和预期输出的示例。您的更改是有意义的,它仍然会输出随机结果,例如:“您的衬衫是l号的。换句话说,很小”。我认为是这样,因为我们称之为random ShirtSize()同样在randomshirtdescription()中在第二个解决方案中,您只需要将两个参数传递给类的构造函数。color
和size
size\u description
将在类内部生成。我看到了。请添加changeself.size\u description=get\u size\u description()
到self.size\u description=self.get\u size\u description()
python解释器的方法名称之前的self湖意味着get\u size\u description
是类范围之外的函数。