依赖于类实例中的值

2024-05-18 07:13:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚接触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()的输出,但它是完全随机的。有人能帮我吗? 我还想继续使用我的类/实例方法来解决这个问题,因为我的主代码要大得多,并且依赖于类和实例

编辑:这是新的代码与阿利霍塞尼先生的方法,但我仍然无法得到它的工作

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)  

当我运行它时,会出现以下错误: 名称错误:未定义名称“get\u size\u description”


Tags: 代码selfsizegetreturndefrandomdescription
1条回答
网友
1楼 · 发布于 2024-05-18 07:13:22

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 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'

相关问题 更多 >