Как сравнить cls внутри метода класса, в классе, который работает со многими подклассами? - PullRequest
0 голосов
/ 28 апреля 2020

Я программирую калькулятор для гражданского строительства. Он рассчитывает свойства здания на основе пользовательского ввода (например, высота здания) и свойств материала.

Я использую несколько подклассов для хранения свойств отдельных материалов. Вдобавок к ним есть класс с методами класса, которые используются для вычислений, которые используют свойства материала и пользовательский ввод.

ОДНАКО определенное свойство (назовем его устойчивым) вычисляется двумя различными способами, в зависимости от того, какой материал используется. Я хочу иметь функцию single для расчета устойчивости всех материалов.

Мой код выглядит следующим образом:

class Material:
    hardness = None
    density = None


    @classmethod
    def CalculateDurability(cls, userInput):
        if cls == '__main__.Concrete_1':
            output = cls.hardness * userInput
        else:
            output = cls.density * userInput
        print(output)



class Concrete_1(Material):
    hardness = 1
    density = 2


class Concrete_2(Material):
    hardness = 3
    density = 4


input = 1
Concrete_1.CalculateDurability(input)
Concrete_2.CalculateDurability(input)

Вывод:

2
4

Но так и должно быть:

1
4

Отсюда ясно, что проблема:

if cls == '__main__.Concrete_1':

Это утверждение всегда ложно.

Так как можно Я правильно сделал это сравнение?

1 Ответ

0 голосов
/ 28 апреля 2020

Вы должны использовать встроенную функцию issubclass () следующим образом:

@classmethod
def CalculateDurability(cls, userInput):
    if issubclass(cls,Concrete_1):
        output = cls.hardness * userInput
    else:
        output = cls.density * userInput
    print(output)
...