Нужна помощь в создании класса Котопес и методов отвечающих за сложение собаки с котом

swarmone

Новичок
Пользователь
Мар 10, 2021
10
0
1
Здравствуйте, помогите пожалуйста реализовать методы отвечающие за сложение собаки с котом. У меня работает только если имена моего кота "cat" и собаки "dog".
А если любые другие объекты - то нет. Понимаю что в методах эти имена задействованы, а как написать чтобы имена могли быть любые и рассчитывалась средняя длина и вес в зависимости от их имен? Буду очень благодарна!

Создать 3 класса 1) Cat, 2) Dog, 3) CatDog

Коты и собаки имеют атрибуты "вес" и "длина"
Реализовать методы отвечающие за сложение собаки с котом.
При этом получается "Котопёс" длина и вес которого будут равны среднему между атрибутами кота и пса которых вы сложили.

Python:
class Cat:
    def __init__(self, weight, length):
        self.weight = weight
        self.length = length


class Dog:
    def __init__(self, weight, length):
        self.weight = weight
        self.length = length


class CatDog:

    def weight(self):
        weight = (cat.weight + dog.weight) / 2
        return weight

    def length(self):
        length = (cat.length + dog.length) / 2
        return length

    def __str__(self) -> str:
        return f"Котопес с весом: {self.weight()} кг\t" \
               f"и длиной: {self.length()} см"


cat = Cat(4, 50)
dog = Dog(10, 150)
cat_dog = CatDog()

print(cat_dog.weight())
print(cat_dog.length())
print(cat_dog)

# murzik = Cat(5, 10)
# bobik = Dog(10, 50)
# murzik_bobik = CatDog()
#
# print(murzik_bobik.weight())
# print(murzik_bobik.length())
# print(murzik_bobik)
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
как правильно сделать, чтобы было и 3 класса и магические методы отвечающие за сложение собаки с котом.
Вот пример:
Python:
class Cat:
    def __init__(self, weight, length):
        self.weight = weight
        self.length = length

    def __add__(self, other):
        if isinstance(other, Dog):
            weight = (self.weight + other.weight) / 2
            length = (self.length + other.length) / 2
            return CatDog(weight, length)

class Dog:
    def __init__(self, weight, length):
        self.weight = weight
        self.length = length

    def __add__(self, other):
        if isinstance(other, Cat):
            weight = (self.weight + other.weight) / 2
            length = (self.length + other.length) / 2
            return CatDog(weight, length)

class CatDog:
    def __init__(self, weight, length):
        self.weight = weight
        self.length = length

    def __str__(self) -> str:
        return f"Котопес с весом: {self.weight} кг\t" \
               f"и длиной: {self.length} см"

cat = Cat(4, 50)
dog = Dog(10, 150)
cat_dog = cat + dog
cat_dog2 = dog + cat
print(cat_dog)
print(cat_dog2)

murzik = Cat(5, 10)
bobik = Dog(10, 50)
murzik_bobik = murzik + bobik
print(murzik_bobik)
 
  • Мне нравится
Реакции: regnor

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
Python:
class Cat:
    def __init__(self, cat_weight, cat_length):
        self.cat_weight = cat_weight
        self.cat_length = cat_length

    def cat_r(self):
        return self.cat_weight, self.cat_length


class Dog:
    def __init__(self, dog_weight, dog_length):
        self.dog_weight = dog_weight
        self.dog_length = dog_length

    def dog_r(self):
        return self.dog_weight, self.dog_length


class CatDog:
    def __init__(self, cat_r, dog_r):
        self.cat_r = cat_r
        self.dog_r = dog_r

    def weight(self):
        weight = (self.cat_r[0] + self.dog_r[0]) / 2
        return weight

    def length(self):
        length = (self.cat_r[1] + self.dog_r[1]) / 2
        return length

    def __str__(self) -> str:
        return f"Котопес с весом: {self.weight()} кг\t" \
               f"и длиной: {self.length()} см"


cat = Cat(4, 50)
dog = Dog(10, 150)
cat_dog = CatDog(cat.cat_r(), dog.dog_r())

print(cat_dog.weight())
print(cat_dog.length())
print(cat_dog)

murzik = Cat(5, 10)
bobik = Dog(10, 50)
murzik_bobik = CatDog(murzik.cat_r(), bobik.dog_r())

print(murzik_bobik.weight())
print(murzik_bobik.length())
print(murzik_bobik)
 
Последнее редактирование:
  • Мне нравится
Реакции: swarmone

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
Python:
class CatDogs:
    def __init__(self, weight, length):
        self.weight = weight
        self.length = length

    def __str__(self):
        return f"Котопес с весом: {self.weight} кг\t" \
               f"и длиной: {self.length} см"

    def __add__(self, other):
        weight_r = (self.weight + other.weight) / 2
        length_r = (self.length + other.length) / 2
        return CatDogs(weight_r, length_r)


cat = CatDogs(4, 50)
dog = CatDogs(10, 150)
print(cat + dog)

murzik = CatDogs(5, 10)
bobik = CatDogs(10, 50)
print(murzik + bobik)
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
добавил ответ, что не только cat и dog работает...
 

swarmone

Новичок
Пользователь
Мар 10, 2021
10
0
1
Python:
class Cat:
    def __init__(self, cat_weight, cat_length):
        self.cat_weight = cat_weight
        self.cat_length = cat_length

    def cat_r(self):
        return self.cat_weight, self.cat_length


class Dog:
    def __init__(self, dog_weight, dog_length):
        self.dog_weight = dog_weight
        self.dog_length = dog_length

    def dog_r(self):
        return self.dog_weight, self.dog_length


class CatDog:
    def __init__(self, cat_r, dog_r):
        self.cat_r = cat_r
        self.dog_r = dog_r

    def weight(self):
        weight = (self.cat_r[0] + self.dog_r[0]) / 2
        return weight

    def length(self):
        length = (self.cat_r[1] + self.dog_r[1]) / 2
        return length

    def __str__(self) -> str:
        return f"Котопес с весом: {self.weight()} кг\t" \
               f"и длиной: {self.length()} см"


cat = Cat(4, 50)
dog = Dog(10, 150)
cat_dog = CatDog(cat.cat_r(), dog.dog_r())

print(cat_dog.weight())
print(cat_dog.length())
print(cat_dog)

murzik = Cat(5, 10)
bobik = Dog(10, 50)
murzik_bobik = CatDog(murzik.cat_r(), bobik.dog_r())

print(murzik_bobik.weight())
print(murzik_bobik.length())
print(murzik_bobik)
Огромное спасибо! А можно это как-то сделать через магический метод сложения?
 

swarmone

Новичок
Пользователь
Мар 10, 2021
10
0
1
Python:
class CatDogs:
    def __init__(self, weight, length):
        self.weight = weight
        self.length = length

    def __str__(self):
        return f"Котопес с весом: {self.weight} кг\t" \
               f"и длиной: {self.length} см"

    def __add__(self, other):
        weight_r = (self.weight + other.weight) / 2
        length_r = (self.length + other.length) / 2
        return CatDogs(weight_r, length_r)


cat = CatDogs(4, 50)
dog = CatDogs(10, 150)
print(cat + dog)

murzik = CatDogs(5, 10)
bobik = CatDogs(10, 50)
print(murzik + bobik)
Извините, я наверное не так выразилась, я имела в виду что как правильно сделать, чтобы было и 3 класса и магические методы отвечающие за сложение собаки с котом.
То есть класс Cat, Dog и CatDog. Чтобы я вводила обьекты для классов Cat и Dog, и при их сложении с помощью магического метода получался обьект класса CatDog со средним весом и длиной. Заранее спасибо!
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
я не вижу в этом смысла, зачем делать еще 2 класса, если функционал есть и в одном...
я вам дал примеры, можете скомпоновать, чтобы было 3 класса, это не сложно...
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
То есть класс Cat, Dog и CatDog. Чтобы я вводила обьекты для классов Cat и Dog, и при их сложении с помощью магического метода получался обьект класса CatDog со средним весом и длиной
именно так не получиться сделать наверное, по крайней мере мне пока в голову ничего не приходит...
 

Форум IT Специалистов