ошибка 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 шт):
Вы вызываете вот этот метод:
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 Київ