取决于 class 实例中的值

Depending values in an instance of a class

我是 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() 的输出匹配,但它是完全随机的。谁能帮我吗? 我也想继续使用我的 classes/instances 方法,因为我的主要代码要大得多并且取决于 类 和实例。

编辑:这是采用 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:名称 'get_size_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 一起使用时它们的行为不正确。我觉得还是改一下比较好。

我认为最好将 randomshirtdescription 函数更改为 returns 描述给定衬衫尺码的函数。像这样:

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'

现在您可以通过以下方式调用 class 和函数从您的代码中获得预期结果:

random_size = randomshirtsize()
shirt1 = shirt('blue', random_size, randomshirtdescription(random_size))

但是,这个解决方案仍然不是面向对象的。我认为最好将这个新 shirtdescription 转换为您的 shirt class.

的方法

我认为更好的 class 应该是这样的:

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'