Заблокирован
1

Ящик не может принять наследство по классам (размеры, вес и цвет)

04.06.2016, 13:20. Показов 638. Ответов 2
Метки нет (Все метки)

Здравствуйте!
Детская задача, но что-то не стыкуется. Не могу сообразить: чего не хватает ящику, почему PyScripter не признаёт код?
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
#-*-coding:cp1251-*-
# Vasil'ev str.320
# Наследование нескольких базовых классов
# Первый базовый класс
class BoxSize :
    # Конструктор
    def __init__(self, width, height, depth, weight ,color) :
        # Присваивание значений полям экземпляра
        self.width=width
        self.height=height
        self.depth=depth
    # Метод для вычисления объема
    def volume (self) :
        # Результат - произведение полей экземпляра
        return self.width*self.height*self.depth
    # Метод для отображения значений полей экземпляра
    # и результата вызова метода volume. ()
    def show (self) :
        # Поля экземпляра класса
        print ("Paзмepы и объем ящика :")
        print ( "Шиpинa :",self.width )
        print ("Bыcoтa :",self.height )
        print ("Глyбинa :",self.depth )
        # Результат вызова метода volume ()
        print ("Oбъeм: ", self.volume())
# Второй базовый класс
class BoxParams :
    # Конструктор
    def __init__(self, weight, color) :
        # Присваивание значений полям экземпляра
        self.weight=weight
        self.color=color
    # Метод для отображения значений полей экземпляра
    def show (self) :
        # Отображение значений полей
        print ("Дополнительные параметры ящика :")
        print ("Bec (масса) :",self.weight )
        print ("Цвeт :", self.color)
# Производный класс
class Box (BoxSize, BoxParams ):
    # Конструктор
    def __init__(self, width, height, depth, weight, color) :
        # Вызов конструктора первого базового класса
        BoxSize.__init__(self, width, height, depth)  # Вот здесь ему не нравится!!
        # Вызов конструктора второго базового класса
        BoxParams.__init__(self, weight, color)
        # Вызов метода show () экземпляра класса
        self.show ()
    # Переопределение метода show ()
    def show (self) :
        # Вызов метода show () из первого базового класса
        BoxSize.show (self)
        # Вызов метода show () из второго базового класса
        BoxParams.show (self)
# Создаем экземпляр производного класса
оbj=Box (10, 20, 30, 5, "зеленый")
PyScripter:
Python
1
2
3
4
5
6
BoxSize.__init__(self, width, height, depth)
Message File Name   Line    Position    
Traceback               
    <module>    <модуль1> 56      
    __init__    <модуль1> 44      
TypeError: __init__() missing 2 required positional arguments: 'weight' and 'color'
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2016, 13:20
Ответы с готовыми решениями:

Имеется 8 ящиков у всех вес по 2 кг, а у одного 1 кг, определить в каком элементе массива содержится ящик в 1кг
Имеется 8 ящиков у всех вес по 2 кг, а у одного 1 кг, записать это все в массив и определить в...

Перейти от Процедур к Классам (пример подпрограммы рисования линии с x1, y1, x2, y2, цвет, фигура)
Здравствуйте! Перечитал фрагментарно уйму книг для &quot;чайников&quot; и профи - сегодня осознал, что...

не может принять аргументы
У меня такая проблема выдает такую ошибку Fatal error: Destructor DataBase::__destruct() cannot...

Может ли функция быть дружественной к классам из разных файлов?
Добрый день, ув. программисты. Я пытаюсь понять, в чем преимущество дружественной функции над...

2
Эксперт по компьютерным сетям
5880 / 3340 / 1031
Регистрация: 03.11.2009
Сообщений: 9,964
04.06.2016, 13:39 2
BoxSize.__init__ принимает пять параметров -->
Цитата Сообщение от Infinity20_5 Посмотреть сообщение
class BoxSize :
* * # Конструктор
* * def __init__(self, width, height, depth, weight ,color) :
но вызываете Вы его с тремя -->
Цитата Сообщение от Infinity20_5 Посмотреть сообщение
BoxSize.__init__(self, width, height, depth) *# Вот здесь ему не нравится!!
1
Заблокирован
04.06.2016, 15:43  [ТС] 3
Цитата Сообщение от Jabbson Посмотреть сообщение
но вызываете Вы его с тремя -->
Спасибо. Извините. У автора книги большая путаница в тексте.

Стр. 320-321: В теле конструктора последовательно вызываются конструкторы базовых классов: командой BoxSize.__init__(self, weight, height, depth) вызывается конструктор экземпляра класса BoxSize, а командой BoxPararns.__init__(self, weight, color) вызывается конструктор экземпляра класса BoxPararns. И в том и в другом случае конструктор вызывается как функция класса с явным указанием имени класса и передачей первым аргументом конструктору ссылки self на экземпляр класса.

Правильный код:
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
#-*-coding:cp1251-*-
# Vasil'ev str.320
# Наследование нескольких базовых классов
# Первый базовый класс
class BoxSize :
    # Конструктор
    def __init__(self, width, height, depth) :
        # Присваивание значений полям экземпляра
        self.width=width
        self.height=height
        self.depth=depth
    # Метод для вычисления объема
    def volume (self) :
        # Результат - произведение полей экземпляра
        return self.width*self.height*self.depth
    # Метод для отображения значений полей экземпляра
    # и результата вызова метода volume. ()
    def show (self) :
        # Поля экземпляра класса
        print ("Paзмepы и объем ящика :")
        print ( "Шиpинa :",self.width )
        print ("Bыcoтa :",self.height )
        print ("Глyбинa :",self.depth )
        # Результат вызова метода volume ()
        print ("Oбъeм: ", self.volume())
# Второй базовый класс
class BoxParams :
    # Конструктор
    def __init__(self, weight, color) :
        # Присваивание значений полям экземпляра
        self.weight=weight
        self.color=color
    # Метод для отображения значений полей экземпляра
    def show (self) :
        # Отображение значений полей
        print ("Дополнительные параметры ящика :")
        print ("Bec (масса) :",self.weight )
        print ("Цвeт :", self.color)
# Производный класс
class Box (BoxSize, BoxParams ):
    # Конструктор
    def __init__(self, width, height, depth, weight, color) :
        # Вызов конструктора первого базового класса
        BoxSize.__init__(self, width, height, depth)  # Вот здесь ему не нравится!!
        # Вызов конструктора второго базового класса
        BoxParams.__init__(self, weight, color)
        # Вызов метода show () экземпляра класса
        self.show ()
    # Переопределение метода show ()
    def show (self) :
        # Вызов метода show () из первого базового класса
        BoxSize.show (self)
        # Вызов метода show () из второго базового класса
        BoxParams.show (self)
# Создаем экземпляр производного класса
оbj=Box (10, 20, 30, 5, "зеленый")
Ответ:
Python
1
2
3
4
5
6
7
8
9
10
>>> 
Paзмepы и объем ящика :
Шиpинa : 10
Bыcoтa : 20
Глyбинa : 30
Oбъeм:  6000
Дополнительные параметры ящика :
Bec (масса) : 5
Цвeт : зеленый
>>>
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2016, 15:43
Помогаю со студенческими работами здесь

Написать программу, которая по выбору пользователя меняет цвет консольного приложения. Пользователь может выбрать цвет ш
Написать программу, которая по выбору пользователя меняет цвет консольного приложения. Пользователь...

Переменная не может принять размер int64
Рабочий код на D: import std.stdio; void main() { byte h; long n, ans = 0; ...

Слушающий сокет не может принять соединение
#include &lt;iostream&gt; #include &lt;winsock2.h&gt; void WSAmel(){ WSADATA w; if...

Самолет может поднять 750 кг, если средний вес человека 70кг. Посчитать сколько человек может поднять самолет?
Напишите пожалуйста исходный код выражения задачи: Самолет может поднять 750 кг, если средний вес...

TMenuItem - размеры, цвет и шрифт
Друзья, доброго дня. Подскажите по TMenuItem Я крашу и увеличиваю шрифт и фон в одном пункте меню...

какой объём картинки (MMS) может принять NOKIA 5300?
Человек в деревне живёт, надо скинуть ему картинку на сотовый, а он не знает такой характеристики,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru