Ошибка типа при передаче объекта в функцию - PullRequest
0 голосов
/ 22 января 2020

Для школьного проекта я создаю биллинговую систему для местного питомника. Каждый счет представляет собой объект с атрибутами startmonth (первый месяц для выставления счета), endmonth (последний месяц для выставления счета) и childName.

class calculate_bill:
    def __init__(self, startmonth, endmonth, childName):
        self.startmonth = startmonth
        self.endmonth = endmonth
        self.childName = childName`

Я использовал выпадающий список tkinter, чтобы получить нужные месяцы и передать выбранный месяц в функцию. Однако, когда я пытаюсь запустить это, я получаю сообщение об ошибке:

TypeError: startmonth () отсутствует 1 обязательный позиционный аргумент: 'bill'

Не уверен, что это значит или как это решить. Любой совет будет принята с благодарностью

def startmonth(self, m1, bill):
    bill.startmonth = m1
    print(bill.startmonth)

1 Ответ

0 голосов
/ 22 января 2020

Я пытаюсь разобраться в коде, которым вы поделились, и я предполагаю, что startmonth - это метод класса calculate_bill, пока все в порядке, но вы упускаете две вещи:

  1. Ваши атрибуты функции и класса неоднозначны, startmonth - это имя атрибута и метода. Замените одно из двух на другое.

  2. Функция startmonth уже получает счет: он называется self, поэтому вам не нужно передавать bill как аргумент. Первый аргумент метода экземпляра всегда сам по себе и традиционно называется self, хотя необязательно.

Это более правильное представление того, что вы пытаетесь сделать:

class CalculateBill:
    def __init__(self, startmonth, endmonth, childName):
        self.startmonth = startmonth
        self.endmonth = endmonth
        self.childName = childName`

    def set_startmonth(self, m1):
        self.startmonth = m1
        print(self.startmonth)

Некоторые указатели об этом коде:

  1. Попробуйте использовать CamelCase для имен классов, это облегчает их идентификацию.
  2. set_startmonth не нужен аргумент bill. он уже есть, с self.
  3. Совершенно нормально писать методы для установки атрибутов экземпляра, читайте о «установщиках»
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...