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

Ошибка в дочернем классе

07.03.2020, 14:47. Показов 2448. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
class Pc:
    frequency = "4.0 Ghz"
    core = "6"
    ram = "16 GB"
    ro_memory = "1 Tb"
    def change_frequency(self, new_frequency):
        self.frequency = new_frequency
    def change_core(self, new_core):
        self.core = new_core
    def change_ram(self, new_ram):
        self.ram = new_ram
    def change_ro_memory(self, new_ro_memory):
        self.ro_memory = new_ro_memory
    def info(self):
        print ("Частота процессора : ", self.frequency,
               "\nКоличество ядер: ", self.core,
               "\nОбъем ОЗУ: ", self.ram,
               "\nОбъем ПЗУ: ", self.ro_memory)
    def __init__(self, f = "None", c = "None", ra = "None", ro = "None"):
        self.frequency = f
        self.core = c
        self.ram = ra
        self.ro_memory = ro
class Notebook (Pc):
    screen = "1920x1080"
    weight = "1kg"
    backlight = "No"
    usb = "4"
    def change_screen (self, new_screen):
        self.new_sc = new_screen
    def change_weight(self, new_weight):
        self.new_we = new_weight
    def change_backlight (self, new_backlight):
        self.new_back = new_backlight
    def change_usb (self, new_usb):
        self.new_u = new_usb
    def __init__(self):
        super().__init__(self, s = "None", we = "None", back = "None",
                         us = "None"):
        self.screen = s
        self.weight = we
        self.backlight = back
        self.usb = us
 
 
 
my_main_pc = Pc("4Ghz", "6", "16 GB", "1 Tb")
my_notebook = Notebook("4Ghz", "6", "16 GB", "1 Tb")
my_main_pc.info()
my_notebook.info()
Подскажите как исправить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2020, 14:47
Ответы с готовыми решениями:

Ошибка в дочернем классе
Не могу найти ошибку в дочернем классе, возможно не правильно написать main Задание и код: Код нужно переписывать в сообщение Только...

Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе
У меня есть основной класс с названием Root один из его членов наследует дочерний класс SubRoot. Скажите как объявить, что бы один из...

Переопределенные операторы в дочернем классе
Всем привет! В общем, столкнулся с проблемой. У меня есть базовый класс в котором переопределены операторы, в нем есть структура с...

10
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
07.03.2020, 19:54
Про несоблюдение правил написания кода говорить не буду... Но сами то как считаете, в чем ошибка? Ну или что Вас не устраивает? )))

Добавлено через 2 минуты
Цитата Сообщение от Lam3_R Посмотреть сообщение
s = "None", we = "None", back = "None"
И в другой Вашей теме же Вам указали, что не строка тут нужна
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
07.03.2020, 20:19
Цитата Сообщение от Lam3_R Посмотреть сообщение
super().__init__(self, s = "None", we = "None", back = "None",
                         us = "None"):
Здесь не должно быть двоеточия. И не должно быть self. А аргументы сюда передаются неверные.
И имена аргументов нечитабельные.
0
0 / 0 / 0
Регистрация: 07.03.2020
Сообщений: 13
08.03.2020, 05:07  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Здесь не должно быть двоеточия. И не должно быть self. А аргументы сюда передаются неверные.
И имена аргументов нечитабельные.
Не всё сразу, будем разбираться по порядку.
Допустим
Python
1
    def __init__(self, f = None, c = None, ra = None, ro = None):
А дочерняя должна выглядеть как-то так?
Python
1
2
        super().__init__(s = None, we = None, back = None,
                         us = None):
Добавлено через 1 минуту
__init__() takes 1 positional argument but 5 were given
Как добавить эти аргументы к дочернему классу?
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
08.03.2020, 05:48
Смотрите. Если Вы хотите в родительском классе использовать атрибуты
Цитата Сообщение от Lam3_R Посмотреть сообщение
self.frequency = f
self.core = c
self.ram = ra
self.ro_memory = ro
А в дочернем и родительские и
Цитата Сообщение от Lam3_R Посмотреть сообщение
self.screen = s
self.weight = we
self.backlight = back
self.usb = us
то:
Python
1
2
def __init__(self, f, c, ra, ro, s, we, back, us):
        super().__init__(f, c, ra, ro)
Не обязательно атрибутам сразу задавать значение по умолчанию. Строка super().__init__() вызывает метод __init__ родительского класса со всеми его атрибутами. Если в дочернем классе не нужно передавать значения для атрибутов родительского, можно метод писать def __init__(self, s, we, back, us): super().__init__(). Но как раз в этом случае нужно задать значения по умолчанию для родительских атрибутов.
А еще можно использовать *args и **kwargs.

По порядку следования методов: человек же сначала рождается, потом обучается. А вы классы сначала учите чему-то, а потом "рожаете" - инициализируете.

Смысл наследования из вашего кода пока неясен.
Цитата Сообщение от Lam3_R Посмотреть сообщение
class Pc:
frequency = "4.0 Ghz"
core = "6"
ram = "16 GB"
ro_memory = "1 Tb"
Вот здесь вы используете атрибуты класса, а зачем?

Добавлено через 1 минуту
Про неговорящие имена передаваемых аргументов вам уже сказали
1
0 / 0 / 0
Регистрация: 07.03.2020
Сообщений: 13
08.03.2020, 14:48  [ТС]
Цитата Сообщение от Lekks Посмотреть сообщение
Вот здесь вы используете атрибуты класса, а зачем?
Для себя, разбирался.
Цитата Сообщение от Lekks Посмотреть сообщение
Вы хотите в родительском классе использовать атрибуты
Я хотел что бы в дочернем классе были атрибуты супер-класса, плюс эти дополнительные, которые принадлежат только дочернему
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
08.03.2020, 14:52
Цитата Сообщение от Lam3_R Посмотреть сообщение
Я хотел что бы в дочернем классе были атрибуты супер-класса, плюс эти дополнительные, которые принадлежат только дочернему
Они там и так будут после использования super().__init__(). Весь вопрос - надо ли передать для них значение в дочерний класс или использовать со значениями по умолчанию из родительского
1
0 / 0 / 0
Регистрация: 07.03.2020
Сообщений: 13
08.03.2020, 16:43  [ТС]
Цитата Сообщение от Lekks Посмотреть сообщение
Они там и так будут
Мы сейчас говорим про screen, weight, backlight и usb?

Добавлено через 3 минуты
Если мы опишем параметры в супер-классе, то при выводе чего-то из него мы не получим screen, weight, backlight и usb. В принципе наверное так можно сделать...
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
08.03.2020, 20:45
Лучший ответ Сообщение было отмечено Lam3_R как решение

Решение

Вот пример у М.Лутца наследования метода __init__. В этом примере от класса "служащий" наследуется все что в методе __init__ класса в подкласс "менеджер" и все что делает метод __init__ подкласса, это подставляет в атрибут "должность" значение "менеджер".
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Person():
    def __init__(self, name, job=None, pay=0):
        self.name = name
        self.job = job
        self.pay = pay
    def lastName(self):
        return self.name.split()[-1]
    def giveRaise(self, percent):
        self.pay = int(self.pay * (1 + percent))
    def __str__(self):
        return '[Person: %s, %s}' % (self.name, self.pay)
 
class Manager(Person):
    def __init__(self, name, pay):
        Person.__init__(self, name, 'mgr', pay)
 
    def giveRaise(self, percent, bonus=.10):
        Person.giveRaise(self, percent + bonus)
Строго говоря метод __init__ в этом примере еще запрашивает аргументы "имя" и "оклад", которые нужны при создании экземпляра и передает их методу __init__ суперкласса. Но если в методе __init__ суперкласса мы будем предварительно как то обрабатывать эти значения, то это будет отображено и в подклассе.
1
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
08.03.2020, 22:07
Лучший ответ Сообщение было отмечено Lam3_R как решение

Решение

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
class OfficeAppliances:
 
    def __init__(self, app_model, price, **kwargs):
        self.app_model = app_model
        self.price = price
        self.other = {key: val for key, val in kwargs.items()}
 
 
class Printer(OfficeAppliances):
    def __init__(self, app_model, price, print_type, count, resource, color=False, **kwargs):
        super().__init__(app_model, price, **kwargs)
        self.print_type = print_type
        self.color = color
        self.cartridge_count = count
        self.cartridge_resource = resource
 
 
class Scanner(OfficeAppliances):
    def __init__(self, app_model, price, depth, scan_type, optic_dens, **kwargs):
        super().__init__(app_model, price, **kwargs)
        self.bit_depth = depth
        self.scan_type = scan_type
        self.optical_density = optic_dens
 
 
class Copier(OfficeAppliances):
    def __init__(self, app_model, price, copy_count, bilateral=False, scaling=False, **kwargs):
        super().__init__(app_model, price, **kwargs)
        self.bilateral = bilateral
        self.copy_count_for_cycle = copy_count
        self.scaling = scaling
 
 
if __name__ == '__main__':
    
    printer_1 = Printer('Xerox-4455', 12500, 'laser', 1, 10000)
    printer_2 = Printer('Samsung ML-4325', 24300, 'laser', 4, 10000, color=True, paper_format='A4')
    scanner_1 = Scanner('Epson 1333', 3200, 600, 'flatbed', 4)
    copier_1 = Copier('HP4229e', 18000, 120, bilateral=True)
Вот вам еще пример
1
0 / 0 / 0
Регистрация: 07.03.2020
Сообщений: 13
15.03.2020, 11:27  [ТС]
Благодарю за подсказки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2020, 11:27
Помогаю со студенческими работами здесь

Перегрузка fstream в дочернем классе
h class Child:public StudentsBD{ friend fstream &operator<<( fstream& , string & ); friend fstream &operator>>( fstream& , string...

Переопределение обработчика в дочернем классе
Есть класс TNodeContainer = class(TScrollBox) Как переопределить событие нажатия на кнопку мыши, например? Здесь это очень странно...

Область видимости в дочернем классе
Источник Правильно я понимаю, что в противоположность C++, в PHP область видимости метода или свойства в дочернем классе может быть не...

Видимость переменных в дочернем классе.
Есть пакет, в котором есть 2 класса. Экземпляр класса2 создается в конструкторе класса1. Как в дочернем классе обратиться public к...

Не инициализируется массив в дочернем классе
Здравствуйте, есть приведённый кусок кода. С переменными проблем нет, а вот в массиве выкидывается куча ошибок, мол поставь точки с запятой...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru