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

我是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():
    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 if
elif
s.对代码进行更改后,如果仍然有错误,请在您的问题中添加一些错误输出和预期输出的示例。您的更改是有意义的,它仍然会输出随机结果,例如:“您的衬衫是l号的。换句话说,很小”。我认为是这样,因为我们称之为random ShirtSize()同样在randomshirtdescription()中在第二个解决方案中,您只需要将两个参数传递给类的构造函数。
color
size
size\u description
将在类内部生成。我看到了。请添加change
self.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
是类范围之外的函数。