Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 08.03.2019
Сообщений: 25

Использовать метод одного класса в другом

14.01.2020, 20:52. Показов 4479. Ответов 4

Студворк — интернет-сервис помощи студентам
Добрый день, подскажите, как решить проблему.
Имеются класс Cat, класс Human, класс House.
Необходимо реализовать возможность проверки еды в доме (за еду отвечает класс House), если еда меньше какого-то количества, то пойти и купить ее(за покупку отвечает класс Human).
За все действия отвечает класс Cat

Спасибо Вам за помощь

Программа в двух словах
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Cat:
    def __init__(self, cat_name):
        self.cat_name = cat_name
        self.cat_fullness = 30
        self.cat_house = None
 
    def __str__(self):
        return f'I am {self.cat_name}, fullness - {self.cat_fullness}, ' + (
            f'I live in {self.cat_house.house_name}' if self.cat_house is not None else 'I\'m homeless.')
 
    def act(self):
        if self.cat_house.food <= 10:
            #Как я могу сюда вызвать метод buy_food из класса Human 
 
class Human:
    def __init__(self, human_name):
        self.human_name = human_name
        self.human_fullness = 100
        self.money = 50
        self.cat = None
        self.human_house = None
        self.check_in(House('the initial house'))
 
    def __str__(self):
        return f'I am {self.human_name}, money - {self.money}, fullness - {self.human_fullness}, ' \
               f'I live in {self.human_house.house_name}, ' + (
                   f'I have a cat - {self.cat.cat_name}' if self.cat is not None else 'I have no cat.')
 
    def buy_food(self):
        if self.money < 50:
            print('You don\'t have enough money!')
            return
        print(f'I has buy food for {self.cat.cat_name}')
        self.money -= 50
        self.human_house.food += 50
 
 
class House:
    def __init__(self, house_name):
        self.dirt = 0
        self.food = 0
        self.house_name = house_name
 
    def __str__(self):
        return f'In house food - {self.food}, dirt - {self.dirt}'


Полностью программа с заданием
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# Необходимо создать класс кота. У кота есть аттрибуты - сытость и дом (в котором он живет).
# Кот живет с человеком в доме.
# Для кота дом характеризируется - миской для еды и грязью.
# Изначально в доме нет еды для кота и нет грязи.
 
# Доработать класс человека, добавив методы
#   подобрать кота - у кота появляется дом.
#   купить коту еды - кошачья еда в доме увеличивается на 50, деньги уменьшаются на 50.
#   убраться в доме - степень грязи в доме уменьшается на 100, сытость у человека уменьшается на 20.
# Увеличить кол-во зарабатываемых человеком денег до 150 (он выучил пайтон и устроился на хорошую работу :)
 
# Кот может есть, спать и драть обои - необходимо реализовать соответствующие методы.
# Когда кот спит - сытость уменьшается на 10
# Когда кот ест - сытость увеличивается на 20, кошачья еда в доме уменьшается на 10.
# Когда кот дерет обои - сытость уменьшается на 10, степень грязи в доме увеличивается на 5
# Если степень сытости < 0, кот умирает.
# Так же надо реализовать метод "действуй" для кота, в котором он принимает решение
# что будет делать сегодня
 
# Человеку и коту надо вместе прожить 365 дней.
 
class Cat:
    def __init__(self, cat_name):
        self.cat_name = cat_name
        self.cat_fullness = 30
        self.cat_house = None
 
    def __str__(self):
        return f'I am {self.cat_name}, fullness - {self.cat_fullness}, ' + (
            f'I live in {self.cat_house.house_name}' if self.cat_house is not None else 'I\'m homeless.')
 
    def sleep(self):
        print(f'{self.cat_name} has gone to sleep')
        self.cat_fullness -= 10
 
    def eat(self):
        print(f'{self.cat_name} has eaten')
        self.cat_fullness += 20
        self.cat_house.food -= 10
 
    def tear_up_wallpaper(self):
        print(f'{self.cat_name} has tore up wallpaper')
        self.cat_fullness -= 10
        self.cat_house.dirt += 5
 
 
    def act(self):
        if self.cat_fullness <= 0:
            print(f'{self.cat_name} died...')
        dice = randint(1, 6)
        if self.cat_fullness < 20:
            self.eat()
        elif self.cat_house.food < 10:
            # Нужно здесь вызвать метод buy_food от класса Human 
            # Можно ли это сделать или надо отдельный метод в классе Cat реализовать
        elif dice == 1:
            self.sleep()
        elif dice == 2:
            self.tear_up_wallpaper()
        else:
            if self.cat_house.food >= 10:
                self.eat()
            else:
                self.sleep()
 
 
class Human:
    def __init__(self, human_name):
        self.human_name = human_name
        self.human_fullness = 100
        self.money = 50
        self.cat = None
        self.human_house = None
        self.check_in(House('the initial house'))
 
    def __str__(self):
        return f'I am {self.human_name}, money - {self.money}, fullness - {self.human_fullness}, ' \
               f'I live in {self.human_house.house_name}, ' + (
                   f'I have a cat - {self.cat.cat_name}' if self.cat is not None else 'I have no cat.')
 
    def take_cat(self, cat):
        cat.cat_house = self.human_house
        self.cat = cat
        print(f'I took a cat')
 
    def check_in(self, house):
        self.human_house = house
        if self.cat is not None:
            self.cat.cat_house = house
 
    def buy_food(self):
        if self.money < 50:
            print('You don\'t have enough money!')
            return
        print(f'I has buy food for {self.cat.cat_name}')
        self.money -= 50
        self.human_house.food += 50
 
    def clean_house(self):
        print('I has clean my house')
        if self.human_house.dirt >= 100:
            self.human_house.dirt -= 100
            self.human_fullness -= 20
        else:
            self.human_house.dirt = 0
            self.human_fullness -= 20
 
    def work(self):
        print('I has gone to work')
        self.money += 150
        self.human_fullness -= 20
 
 
class House:
    def __init__(self, house_name):
        self.dirt = 0
        self.food = 0
        self.house_name = house_name
 
    def __str__(self):
        return f'In house food - {self.food}, dirt - {self.dirt}'
 
 
Tom = Cat(cat_name='Tom')
Jack = Human(human_name='Jack')
House_near_Moscow = House(house_name='House near Moscow')
Jack.take_cat(Tom)
Jack.check_in(House_near_Moscow)
for day in range(1, 21):
    print('================= day {} ================'.format(day))
    Tom.act()
    print(Tom)
    print(House_near_Moscow)
 
# Усложненное задание (делать по желанию)
# Создать несколько (2-3) котов и подселить их в дом к человеку.
# Им всем вместе так же надо прожить 365 дней.
 
# (Можно определить критическое количество котов, которое может прокормить человек...)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.01.2020, 20:52
Ответы с готовыми решениями:

Как переменную из одного класса использовать в другом?
Как переменную из одного класса использовать в другом?

Как использовать переменную из одного класса в другом?
У меня есть два класса. Class A к примеру Self.entry = блаблабла Self.name = self.entry.get() Class B Здесь в методе хочу...

Использовать поля одного класса в другом классе
Есть класс Parking() с созданным объектом currentParking1 и интовым полем currentParking1.parkingSpace = 1; Есть класс Car() с созданным...

4
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.01.2020, 05:43
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class House:
    def __init__(self, house_name):
        self.dirt = 0
        self.food = 0
        self.house_name = house_name
 
 
class Human:
    def __init__(self, human_name):
        self.human_name = human_name
        self.human_fullness = 100
        self.money = 50
        self.cat = None
        self.human_house = House('the initial house')
        
    def is_home_need_food(self, limit=10):
        """
        Необходимо реализовать возможность проверки еды в доме 
        (за еду отвечает класс House), если еда меньше какого-то количества
        """
        return self.human_house.food < limit        
 
        
applejack = Human(human_name='Applejack')
if applejack.is_home_need_food():
    print('нужно купить еду')
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
15.01.2020, 08:18
Jane_Jane, немного добавлю:

1) Зачем в классах переменные содержат название конструктора класса, например Cat имеет переменную cat_name, просто оставьте name. Ведь намного приятнее использовать Cat.name, чем Cat.cat_name.

2) Перекрестные ссылки, чтобы избавиться от кучи функций, связывайте классы, например добавьте в класс Cat, master(хозяин), house(дом) и тогда вы сможете вызывать их методы.

Добавлено через 6 минут
#ADD

Еще лучше в вашем случае использовать @property, т.к. при смене дома например у хозяина, по логике вещей у кота должен тоже поменяться дом.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.01.2020, 08:25
Кстати, согласен. ООП тут как-то боком привязано. Намного нагляднее было бы организовать базу данных с такими сущностями:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class House:
    def __init__(self, name):
        self.name = name
        self.dirt = 0
        self.food = 0
 
class Human:
    def __init__(self, name):
        self.name = name
        self.fullness = 100
        self.money = 50
        self.house = None
 
class Cat:
    def __init__(self, name):
        self.name = name
        self.fullness = 30
        self.house = None
        self.human = None
* справочник домов
* человек, который может жить в доме
* кот, который может жить в доме и у которого может быть хозяин.

Особенности такой реализации:
* у человека и у кота могут быть разные дома
* у одного человека может быть несколько котов.

Добавлено через 51 секунду
* кот может жить в доме, но не иметь хозяина
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
15.01.2020, 09:01
Пример без реализации методов покупки еды и т.д.
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# -*- coding: utf-8 -*-
 
class RIP(Exception):
    """Исключение если кто то умер от голода."""
 
class BUM(Exception):
    """Исключение если кто то стал бомжом."""
 
class Animal:
    """Родительский класс для всех животных."""
    _name = None
    _house = None
    _fullness = 100
 
    def __init__(self, name:str):
        self._name = name
 
    def __str__(self)->str:
        return f"{self.__class__.__name__}(name={self._name})"
 
    @property
    def name(self)->str:
        """Имя. Имя даётся раз и навсегда!"""
        return self._name
 
    @property
    def house(self):
        """Ссылка на хату."""
        return self._house
    
    @house.setter
    def house(self, house:"House"):
        """Метод изменение хаты."""
        self._house = house
 
    @property
    def fullness(self)->int:
        """Методы получения сытости."""
        return self._fullness
 
    @fullness.setter
    def fullness(self, fullness:int):
        """Метод установки значения сытости. Если сытость меньше нуля,
        то будет вызвано исключение RIP. Максимальное значение 100."""
        if fullness < 0: raise RIP(f"{self} - fullness < 0!")
        self._fullness = fullness if fullness < 100 else 100
 
class Cat(Animal):
    _human = None
 
    @property
    def human(self):
        """Ссылка на хозяина."""
        return self._human
    
    @human.setter
    def human(self, human:"Human"):
        """Метод изменение хозяина."""
        self._human = human 
 
class Human(Animal):
    _cat = None
    _money = 100
 
    @property
    def cat(self):
        """Ссылка на кота."""
        return self._cat
 
    @cat.setter
    def cat(self, cat:"Cat"):
        """Метод установки кота."""
        self._cat = cat
        self._cat.human = self
        self._cat.house = self._house
 
    @property
    def money(self)->int:
        """Метод получения количества кеша."""
        return self._money
 
    @money.setter
    def money(self, money:int):
        """Метод установки количества кеша. Если кеш меньше нуля,
        то будет вызвано исключение BUM."""
        if money < 0: raise BUM(f"{self} - money < 0!")
        self._money = money
 
    @property
    def house(self)->str:
        """Переопределение метода."""
        return self._house
 
    @house.setter
    def house(self, house:"House"):
        """Переопределяем метод смены хаты, т.к. по логике вещей
        если мы переежаем, то котика берем с собой, если он есть!"""
        self._house = house
        if self._cat: self._cat.house = house
 
class House:
    _name = None
 
    def __init__(self, name:str):
        self._name = name
 
    def __str__(self)->str:
        return f"House(name={self._name})"
 
    @property
    def name(self)->str:
        """Имя. Которое можно изменять!"""
        return self._name
 
    @name.setter
    def name(self, name:str):
        """Метод смены имени, т.к. своё убежище
        ты можешь называть как тебе угодно."""
        self._name = name
 
 
Tom = Cat("Tom")
Jack = Human("Jack")
 
little_house = House("Little house")
 
# Джек берёт кота, на улице
Jack.cat = Tom
# Дальше он приносит его в свою квартиру
Jack.house = little_house
 
print(f"{Tom}, хозяин - {Tom.human}, хата - {Tom.house}")
# Cat(name=Tom), хозяин - Human(name=Jack), хата - House(name=Little house)
 
# Джек решил переехать в дом побольше
big_house = House("Big house")
Jack.house = big_house
 
print(f"{Tom}, хозяин - {Tom.human}, хата - {Tom.house}")
#Cat(name=Tom), хозяин - Human(name=Jack), хата - House(name=Big house)


Добавлено через 4 минуты
Либо сделать так:

Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
class Animal:
    """Родительский класс для всех животных."""
    _name = None
    _fullness = 100
 
    def __init__(self, name:str):
        self._name = name
 
    def __str__(self)->str:
        return f"{self.__class__.__name__}(name={self._name})"
 
    @property
    def name(self)->str:
        """Имя. Имя даётся раз и навсегда!"""
        return self._name
 
    @property
    def fullness(self)->int:
        """Методы получения сытости."""
        return self._fullness
 
    @fullness.setter
    def fullness(self, fullness:int):
        """Метод установки значения сытости. Если сытость меньше нуля,
        то будет вызвано исключение RIP. Максимальное значение 100."""
        if fullness < 0: raise RIP(f"{self} - fullness < 0!")
        self._fullness = fullness if fullness < 100 else 100
 
class Cat(Animal):
    _human = None
 
    @property
    def human(self):
        """Ссылка на хозяина."""
        return self._human
    
    @human.setter
    def human(self, human:"Human"):
        """Метод изменение хозяина."""
        self._human = human 
 
    @property
    def house(self):
        """Ссылка на хату."""
        if not self._human: return None
        return self._human.house
    
class Human(Animal):
    _cat = None
    _money = 100
 
    @property
    def cat(self):
        """Ссылка на кота."""
        return self._cat
 
    @cat.setter
    def cat(self, cat:"Cat"):
        """Метод установки кота."""
        self._cat = cat
        self._cat.human = self
 
    @property
    def money(self)->int:
        """Метод получения количества кеша."""
        return self._money
 
    @money.setter
    def money(self, money:int):
        """Метод установки количества кеша. Если кеш меньше нуля,
        то будет вызвано исключение BUM."""
        if money < 0: raise BUM(f"{self} - money < 0!")
        self._money = money
 
    @property
    def house(self):
        """Ссылка на хату."""
        return self._house
    
    @house.setter
    def house(self, house:"House"):
        """Метод изменение хаты."""
        self._house = house
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2020, 09:01
Помогаю со студенческими работами здесь

Не могу использовать переменную с одного класса в другом!
Проблема следующая. Есть три класса Первый главный public class LaunchUrlIndicator { public static void main(String args) { ...

Можно ли использовать объекты одного класса в другом?
И если можно то как? Например если определить это так(предположим что есть два класса - employee и date) class employee { ...

Считать данные с одного класса и использовать их в другом классе
У меня есть два класса в программе - 1. Window Form со всеми контролс и переменными и 2. Асинхронный TCP. Сейчас в TCP можно написать...

Использовать переменную события в другом методе одного класса
Есть метод где я подписываюсь на событие private bool IsCameraRestarted(string ip, int port) { bool result =...

Как использовать значение переменной из одного класса в другом?
Есть у меня класс package maps { import flash.display.MovieClip; import flash.events.Event; public class Level_1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru