python - 取决于类实例中的值

标签 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():
    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:名称“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'

编辑

如果您进行了上述更改,您的函数可以正常工作,但在与您的类一起使用时它们的行为不正确。我认为最好对它们进行更改。

我认为最好将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 类的方法。

我认为更好的类(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'

关于python - 取决于类实例中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52765795/

相关文章:

Java:使用导入或显式包/类名?

python - 在类中获取变量?

Python Pandas 绘制由 secondary_y 更改的图层顺序

python - Flask WTForms - 基于多个表单字段的自定义验证器

java反射 - 如何获取特定属性的名称

Java - 如何检查 JOptionPane.showInputDialog 中确切输入的内容

python - 如何预测 Python 随机数生成器的输出?

java - 我可以在具有多个实例的类上使用 Random 方法吗?

python - 通过部分字符串匹配合并两个数据帧

python - 无需执行即可从文件中读取列表和字典