ошибка bound method

class Country():
    def __init__(self, country_name, continent_name, country_population, country_area_code, country_capital, city_list):
        self._country_name = country_name
        self._continent_name = continent_name
        self.country_population = country_population
        self._country_area_code = country_area_code
        self._country_capital = country_capital
        self.city_list = city_list

    def print_country_inf(self):
        general_information = str(self.country_population) + " " + self.city_list
        return str(self.country_population) + " " + self.city_list

    def print_continent_country_and_capital(self):
        country_and_capital = str(self._country_name) + " " + str(self._continent_name) + " " +  \
        self._country_area_code + " " + str(self._country_capital)
        return str(self._country_name) + " " + str(self._continent_name) + " " + self._country_area_code \
        + " " + str(self._country_capital)

    def print_city_list(self):
        print_city_list = self.city_list
        return listself.city_list

Ukraine = Country ("Україна", "Европа", 42000000, 380, "Київ", ["Вінниця", "Луцьк", "Дніпро", "Донецьк", "Житомир","Ужгород", "Запоріжжя", "Івано-Франківськ", "Київ","Кропивницький", "Луганськ", "Львів", "Миколаїв", "Одеса", "Полтава", "Рівне", "Суми", "Тернопіль", "Харків", "Херсон", "Хмельницький", "Черкаси", "Чернігів", "Чернівці"])

После запуска:

print(Ukraine.print_city_list)

получаю:

<bound method Country.print_city_list of <main.Country object at 0x0000028A639CEFD0>> Process finished with exit code 0

после запуска:

Ukraine.print_city_list()

получаю:

Process finished with exit code 0

Помогите разобраться что делаю не так?


Ответы (1 шт):

Автор решения: cauf

Вы вызываете вот этот метод:

    def print_city_list(self):
        print_city_list = self.city_list
        return listself.city_list

Я удивляюсь, почему оно вообще работает. У данного метода всего 2 инструкции. Первая: присвоение локальной переменной print_city_list значения свойства объекта self.city_list. И вторая: возврат свойства city_list какого-то объекта listself (в приведенном куску кода данная переменная не описана).

Какое вообще поведение ожидалось от этого кода - не понятно. Но, судя по названиям методов, предположу, что оно должно печатать список городов, а не возвращать его.

    def print_city_list(self):
        print(self.city_list)

Если же задача стоит именно в возврате списка городов, то не вижу смысл оборачивать это в какой-то метод. Список прекрасно будет доступен и по самому свойству:

print(Ukraine.city_list)

Да и в целом у вас достаточно странный и непонятный код. Если я правильно понял все то, что вы хотели сделать, то у меня получилось вот так:

class Country():
    def __init__(self, country_name, continent_name, country_population, country_area_code, country_capital, city_list):
        self._country_name = country_name
        self._continent_name = continent_name
        self.country_population = country_population
        self._country_area_code = country_area_code
        self._country_capital = country_capital
        self.city_list = city_list

    # здесь указан декоратор @property для того, что бы вызывать метод, 
    # как свойство (то есть без скобок и аргументов) - это полезно, 
    # когда метод возвращает простую комбинацию данных, как в вашем случае
    @property 
    def country_inf(self):
        return f'{self.country_population} {self.city_list}'

    @property
    def continent_country_and_capital(self):
        return f'{self._country_name} {self._continent_name} {self._country_area_code} {self._country_capital}'


Ukraine = Country ("Україна", "Европа", 42000000, 380, "Київ", ["Вінниця", "Луцьк", "Дніпро", "Донецьк", "Житомир","Ужгород", "Запоріжжя", "Івано-Франківськ", "Київ","Кропивницький", "Луганськ", "Львів", "Миколаїв", "Одеса", "Полтава", "Рівне", "Суми", "Тернопіль", "Харків", "Херсон", "Хмельницький", "Черкаси", "Чернігів", "Чернівці"])

print("=>", Ukraine.city_list)
print("=>", Ukraine.country_inf)
print("=>", Ukraine.continent_country_and_capital)

Возврат данного кода:

=> ['Вінниця', 'Луцьк', 'Дніпро', 'Донецьк', 'Житомир', 'Ужгород', 'Запоріжжя', 'Івано-Франківськ', 'Київ', 'Кропивницький', 'Луганськ', 'Львів', 'Миколаїв', 'Одеса', 'Полтава', 'Рівне', 'Суми', 'Тернопіль', 'Харків', 'Херсон', 'Хмельницький', 'Черкаси', 'Чернігів', 'Чернівці']
=> 42000000 ['Вінниця', 'Луцьк', 'Дніпро', 'Донецьк', 'Житомир', 'Ужгород', 'Запоріжжя', 'Івано-Франківськ', 'Київ', 'Кропивницький', 'Луганськ', 'Львів', 'Миколаїв', 'Одеса', 'Полтава', 'Рівне', 'Суми', 'Тернопіль', 'Харків', 'Херсон', 'Хмельницький', 'Черкаси', 'Чернігів', 'Чернівці']
=> Україна Европа 380 Київ
→ Ссылка