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

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

14.01.2020, 20:52. Показов 4543. Ответов 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
2696 / 1602 / 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
2696 / 1602 / 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
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru