Зависимые значения в экземпляре класса

1

Я новичок в 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(), но он абсолютно случайный. Может кто-нибудь мне помочь? Я также хочу остаться с моим подходом к классам/примерам, потому что мой основной код намного больше и зависит от классов и экземпляров.

EDIT: Это новый код с подходом г-на Алихосейни, но я все еще не могу заставить его работать.

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' не определено

  • 0
    Проблема в том, что вы вызываете randomshirtsize() в вызове класса shirt , но затем вы вызываете его снова в randomshirtdescription . На самом деле, вы вызываете это три раза в этой функции. Вам нужно запустить randomshirtsize() один раз и передать эти результаты в randomshirtdescription() чтобы результаты были статичными и не пересчитывались каждый раз, когда вы пытаетесь сравнить значение. Имеет ли это смысл?
  • 0
    @brittenb Сделать это ответом, а не комментарием?
Показать ещё 2 комментария
Теги:
class
instance
random

1 ответ

3
Лучший ответ

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'
  • 0
    Спасибо за ваш ответ! К сожалению, даже с вашим решением, выход по-прежнему случайный. Должен ли я изменить что-то еще в моем коде?
  • 0
    Теперь я обнаружил, что в моем решении была ошибка, и я удалил () после random_size, если elif s. Сделайте это изменение в своем коде, если все еще что-то не так, пожалуйста, добавьте пример неправильного вывода и ожидаемый пример к вашему вопросу.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню