Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 04.10.2021
Сообщений: 1

TypeError: AddCar() missing 1 required positional argument: 'self'

04.10.2021, 12:55. Показов 4077. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
выдает ошибку. Условно нужно, чтобы создавать обьект машины.

Traceback (most recent call last):
File "C:/Users/admin/PycharmProjects/pythonProject16/main.py", line 24, in <module>
Car.AddCar()
TypeError: AddCar() missing 1 required positional argument: '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
class Car:
 
    def __init__(self, cost, mark, model, maxSpeed, color):
        self.cost = cost
        self.mark = mark
        self.model = model
        self.maxSpeed = maxSpeed
        self.color = color
 
    def AddCar(self, cost=input("Введите, сколько хотите за машину: "),
               mark=input("Введите марку автомобиля: "),
               model=input("Введите модель автомобиля: "),
               maxSpeed=input("Введите его максимальную скорость: "),
               color=input("Введите цвет: ")):
        self.cost = cost
        self.mark = mark
        self.model = model
        self.maxSpeed = maxSpeed
        self.color = color
 
        print("Марка - " + AddCar.mark)
        print("Модель - " + AddCar.model)
        print("Цвет - " + AddCar.color)
        print("Стоимость - " + AddCar.cost)
        print("Максимальная скорость - " + AddCar.maxSpeed)
        print("\n")
 
Car.AddCar()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.10.2021, 12:55
Ответы с готовыми решениями:

TypeError: add_point() missing 1 required positional argument: 'y'
Всем привет! Начал писать класс для создания треугольника, но почти сразу же появилась загвоздка: при запуске кода появляется ошибка: ...

TypeError: describe_battery() missing 1 required positional argument: 'self'
class Car(): &quot;&quot;&quot;Простая модель автомобиля.&quot;&quot;&quot; def __init__(self, make, model, year): self.make = make ...

TypeError: sum() missing 1 required positional argument: 'arr'
В этом случае я пытаюсь создать алгоритм для суммирования , сам алгоритм прост у нас есть массив из которого мы берём первое значение ,...

28
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
06.10.2021, 11:42
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fudthhh Посмотреть сообщение
По моей логике, глупо создавать метод добавления машины в класс машины.
Для меня глупого, ООП - это моделирование нашего мышления.
Кликните здесь для просмотра всего текста
Но у каждого его мышление индивидуально. Видимо когда Вы думаете о машине как об абстрактном объекте, то рассматриваете только то, что машина может делать, и это отождествляете с множеством машин, которые относятся к классу "Машины". Я же когда рассматриваю мысленно множество машин, которые относятся к классу "Машины", то мысленно просматриваю не только те действия, которые может совершать машина, но и те действия, которые совершают с машиной. Поэтому действия, которые совершают с машиной, я тоже отношу к классу машин и моделирую их в классе с помощью статических методов. Хотя для этого годятся и методы класса. Просто я их подзабыл и пока использую только статические методы.
Только не нужно утверждать, что все должны мыслить одинаково, и что те, кто думает по другому чем Вы, они глупые. А раз все думают по разному, то и модели их мышления будут разные. У Вас процесс мышления использует дополнительный класс. Я же в своем мышлении все, что относится к абстрактному понятию машины мысленно объединяю в одно целое, в один класс. Я считаю что и Ваше мышление и мое мышление нельзя называть глупым, так как и то и другое приводят к верному результату, хотя и разными путями.
В моем понимании глупым можно называть только такое мышление, которое приводит к ошибочному результату.
0
 Аватар для Semen-Semenich
5239 / 3483 / 1176
Регистрация: 21.03.2016
Сообщений: 8,314
06.10.2021, 18:14
Цитата Сообщение от Viktorrus Посмотреть сообщение
Я считаю что и Ваше мышление и мое мышление нельзя называть глупым, так как и то и другое приводят к верному результату, хотя и разными путями.
В моем понимании глупым можно называть только такое мышление, которое приводит к ошибочному результату.
тут я с вами полностью согласен
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
06.10.2021, 20:21
Кликните здесь для просмотра всего текста
MixailMokhov, Я еще раз все обдумал, и пришел к выводу, что я был не прав, когда предложил использовать в классе статический метод, добавляя машины в список. Это нарушает основной принцип класса, в котором должны описываться свойства и действия (методы), которые присущи любому объекту, являющемуся экземпляром этого класса. Но добавление машины в список не является действием присущим любой машине. Однако заправка машины топливом, углеводородным или с использованием электроэнергии, является действием над машиной, присущим любой машине (то есть присуще любому экземпляру класса "Машина"). Без заправки топливом любая машина не поедет. И вот такой метод"заправка_машины" было бы оправдано описать внутри класса "Машина".
То есть рассматривая действия над экземпляром класса, нужно четко понимать, присуще ли эти действия для всех экземпляров этого класса или нет. И тогда решать о возможности описания этих действий внутри класса в виде статического метода или метода класса.
Атрибуты присущие только отдельным экземплярам класса, нужно присваивать конкретным экземплярам класса за пределами класса.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
07.10.2021, 19:30
Welemir1, Данная дискуссия пошла мне на пользу. Я вспомнил, что Лутц (да и в документации разработчиков не встречал другого) говорит о том, что запись
"экземпляр_класса.метод(self, ...)"
делает только одно, вызывает метод и передает в него экземпляр класса в качестве аргумента.
При этом содержание тела метода может быть таким, что бы интерпретировать , что объект_экземпляр что то делает, или что с этим объектом_экземпляром что то делают.
И является ошибкой, всегда интерпретировать, что такая запись говорит о том, что экземпляр что то делает.
Повторю, такая запись говорит только о том, что экземпляр передается в метод в качестве аргумента, и не более того.
Интерпретировать можно только исходя из того, что с этим аргументом_экземпляром происходит внутри метода.
Каюсь, я тоже не верно интерпретировал запись "экземпляр_класса.метод(self, ...)".
Теперь, благодаря этой дискуссии я прозрел.
Метод add_car(self, ...) можно интерпретировать только исходя из описания метода, анализируя, что он делает.
Поэтому моя идея для действий с экземпляром с помощью статического метода, излишняя. Нужно просто грамотно описывать метод, в теле которого должны осуществляться действия с экземпляром, а не действия осуществляемые самим экземпляром.
В чем ошибка ТС и Onet1me, это то , что они не понимают механизма, как работает питон, и при вызове метода не передают ему экземпляр класса, который требуется параметром self в списке параметров метода. А сам метод у них, не создает новый экземпляр класса а меняет значение параметров у экземпляра класса, который должен передаваться этому методу, но у них не передается.

Добавлено через 20 минут
P.S. Интерпретировать запись
Python
1
2
x = Car(...)
x.add_car(self, ...)
как то, что "машина добавляет машину", в принципе не верно. Все зависит от описания, что делает метод.
Если бы ТС написал за пределами класса такой код, то метод бы получил в качестве аргументов машину x и поменял бы ее параметры (значения атрибутов). Капитально переделал бы автомобиль, изменив его под другую марку автомобиля, что можно сделать только мысленно но не в реальности.
Если же ТС хотел методом создать новый экземпляр класса, то метод во-первых должен был бы быть статическим, а во-вторых создавать новый экземпляр класса.
И тогда вызываться так как у него Car.add_car()
И третий вариант, если бы ТС хотел бы уничтожить старый автомобиль и приобрести новый, то он был бы должен передать в метод экземпляр старого автомобиля x.add_car(self, ...) и внутри метода удалять этот экземпляр класса и создавать новый.
1
07.10.2021, 19:37

Не по теме:

Viktorrus, согласен с вами, все верно, рад что смог помочь, мне всегда нравилось ваше желание глубоко копать в доку и в книгу для того, чтобы разобраться и прийти к какому то решению. К сожалению, нашим юным форумчанам порой вот этого не достает.

0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
07.10.2021, 21:20
Цитата Сообщение от MixailMokhov Посмотреть сообщение
Условно нужно, чтобы создавать обьект машины.
Для этого есть паттерн Factory - сама себя машина не соберет.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
08.10.2021, 12:05
Цитата Сообщение от Arsegg Посмотреть сообщение
Для этого есть паттерн Factory - сама себя машина не соберет.
Фабричный метод — это порождающий паттерн проектирования, который решает проблему создания различных продуктов, без указания конкретных классов продуктов.

Фабричный метод задаёт метод, который следует использовать вместо вызова оператора new для создания объектов-продуктов. Подклассы могут переопределить этот метод, чтобы изменять тип создаваемых продуктов.
https://refactoring.guru/ru/de... on/example

Это не совсем то, что нужно ТС, так как ТСу известен класс экземпляр которого нужно создать.
Машину создает не машина а класс Car, так как он является в питоне фабрикой создания экземпляров.
Просто ТС не понимает, как это реализовать.
Arsegg, если Вы под паттерном Factory имели ввиду что то другое, то дайте ссылку.
Но не понятно, зачем нужно что то еще, когда класс Car сам создает экземпляры машин.
Класс Car не является машиной. Поэтому в данном случае нельзя говорить, что "машина создает машину".
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
08.10.2021, 12:21
Viktorrus, по описанию проблемы ТСа сложно судить, какое решение ему подойдет. Я про то, что, конечно, можно написать создающий метод (creation method) для класса Car (автоботы одобряют). Все-таки логичнее, с точки зрения здравого смысла иметь для данных целей фабрику: на случай расширения ассортимента - авиация там, судоходство и т. п.
P. S. Сравнение фабрик.
P. P. S. Если ТС хочет добавлять новые ноды, то тогда надо свой класс переименовать на LinkedList, т. к. это уже коллекция, а не Car.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
08.10.2021, 13:39
MixailMokhov, Перед тем, как Вы даете код, нужно давать описание того, что Вы хотите сделать.
Не понятно, что Ваш код делает.
Вы хотите создать новую марку машины?
Или Вы хотите занести в список существующую марку машины?
Или хотите заказать машину, указав желательные для Вас параметры?

Создание в питоне экземпляра класса Car осуществляется следующим образом:
Кликните здесь для просмотра всего текста
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
class Car:
 
    def __init__(self, cost, mark, model, maxSpeed, color):
        self.cost = cost
        self.mark = mark
        self.model = model
        self.maxSpeed = maxSpeed
        self.color = color
 
class Car_II:
 
    def __init__(self, cost, mark, model, maxSpeed, color):
        self.cost = cost
        self.mark = mark
        self.model = model
        self.maxSpeed = maxSpeed
        self.color = color
 
    def add_car():
        cost = input("Введите, сколько хотите за машину: ")
        mark = input("Введите марку автомобиля: "),
        model = input("Введите модель автомобиля: "),
        maxSpeed = input("Введите его максимальную скорость: "),
        color = input("Введите цвет: ")
        return Car_II(cost, mark, model, maxSpeed, color)
 
if __name__ == '__main__':
 
    # Вариант I:
    car1 = Car(None, 'm1', None, None, None)  # Указываются значения параметров машины
                                                   # которые будут присвоены атрибутам экземпляра
    # Вариант II:
    # запрашиваются параметры машины, что бы потом передать их в качестве аргументов
    cost = input("Введите, сколько хотите за машину: ")
    mark = input("Введите марку автомобиля: "),
    model = input("Введите модель автомобиля: "),
    maxSpeed = input("Введите его максимальную скорость: "),
    color = input("Введите цвет: ")
 
    # и создается экземпляр машины (не машиной, а классом:) )
    car2 = Car(cost, mark, model, maxSpeed, color)
 
    # Вариант III:
    # для многократного использования код создания экземпляра машины оформляется в виде функции
    def add_car():
        cost = input("Введите, сколько хотите за машину: ")
        mark = input("Введите марку автомобиля: "),
        model = input("Введите модель автомобиля: "),
        maxSpeed = input("Введите его максимальную скорость: "),
        color = input("Введите цвет: ")
        return Car(cost, mark, model, maxSpeed, color)
 
    car3 = add_car()
 
    # Вариант IV:
    # ну а если Вы не хотите, что бы имя функции находилось в области глобальных переменных,
    # где может появиться переменная с таким же именем, 
    # то можете разместить эту функцию в пространстве имен класса, 
    # сделав ее статическим методом класса,
    # статический метод является обычной функцией, но размещается в пространстве имен класса
 
        # но так как статический метод не имеет параметра self, то вызывать его нужно
        # не через экземпляр класса, а через класс
 
    car4 = Car_II.add_car()
 
    print(car1.mark)
    print(car2.mark)
    print(car3.mark)
    print(car4.mark)


Выводит:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Введите, сколько хотите за машину:
Введите марку автомобиля: m2
Введите модель автомобиля:
Введите его максимальную скорость:
Введите цвет:
Введите, сколько хотите за машину:
Введите марку автомобиля: m3
Введите модель автомобиля:
Введите его максимальную скорость:
Введите цвет:
Введите, сколько хотите за машину:
Введите марку автомобиля: m4
Введите модель автомобиля:
Введите его максимальную скорость:
Введите цвет:
m1
('m2',)
('m3',)
('m4',)


Добавлено через 3 минуты
Цитата Сообщение от Arsegg Посмотреть сообщение
по описанию проблемы ТСа сложно судить, какое решение ему подойдет.
Полностью согласен. ТС дал код, но не написал, что должен делать этот код и вообще какая перед ТС стоит задача.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.10.2021, 13:39

TypeError: prime() missing 1 required positional argument: 'Simple'
Simple = 2 amount = 0 def prime(Simple): n = Simple counter = 0 for i in range(1, n + 1): if n % i ==...

TypeError: XXX() missing 1 required positional argument: 'message'
Вот код # -*- coding: utf-8 -*- &quot;&quot;&quot; This Example will show you how to use register_next_step handler. &quot;&quot;&quot; import constants ...

Ошибка missing 1 required positional argument: 'self'
всем привет. в этом коде: from tkinter import* class Main(): def __init__(self): tk=Tk() tk.geometry('300x300') ...

Выдает ошибку "Client.__init__() missing 1 required keyword-only argument: 'intents'"
import discord class MyClient(discord.Client): async def on_ready(self): print('Logged on as...

SyntaxError: positional argument follows keyword argument
Прошу помочь, где функция clicked1 пишет ошибку SyntaxError: positional argument follows keyword argument test1=str ...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru