#python #methods #overloading
#python #методы #перегрузка
Вопрос:
Итак, в основном мой код печатает None после печати инструкции, которую я хочу, чтобы она печатала. Как я могу остановить печать этого None
class Panda:
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age
def sleep(self,time=None):
self.time=time
if self.time!=None:
if self.time>=3 and self.time<=5:
self.food='Mixed Veggies'
if self.time>=6 and self.time<=8:
self.food='Eggplant amp; Tofu'
if self.time>=9 and self.time<=11:
self.food='Broccoli Chicken'
print('{} sleeps {} hours daily and should have {}'.format(self.name,self.time,self.food))
else:
print("{}'s duration is unknown thus should have only bamboo leaves".format(self.name))
panda1=Panda("Kunfu","Male", 5)
panda2=Panda("Pan Pan","Female",3)
panda3=Panda("Ming Ming","Female",8)
print(panda2.sleep(10))
print(panda1.sleep(4))
print(panda3.sleep())
Комментарии:
1. Проблема в том, что ваша функция
sleep
выполняет печать сама. таким образом, было бы достаточно просто вызвать,panda2.sleep(10)
не заключая его вsleep
нет функции возврата, она неявно возвращаетNone
. таким образом,sleep
.
Ответ №1:
print
Функция не возвращает в Python, она просто записывает в stdout
; поэтому, когда вы вызываете sleep
метод для экземпляра, он просто печатает None
.
Чтобы исправить это, вам нужно либо return
вместо печати в sleep
, либо просто вызвать его, не заключая его в print
инструкцию.
Результат будет таким, например:
class Panda:
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age
def sleep(self,time=None):
self.time=time
if self.time!=None:
if self.time>=3 and self.time<=5:
self.food='Mixed Veggies'
if self.time>=6 and self.time<=8:
self.food='Eggplant amp; Tofu'
if self.time>=9 and self.time<=11:
self.food='Broccoli Chicken'
return '{} sleeps {} hours daily and should have {}'.format(self.name,self.time,self.food)
else:
return "{}'s duration is unknown thus should have only bamboo leaves".format(self.name)
panda1=Panda("Kunfu","Male", 5)
panda2=Panda("Pan Pan","Female",3)
panda3=Panda("Ming Ming","Female",8)
print(panda2.sleep(10))
print(panda1.sleep(4))
print(panda3.sleep())
или
class Panda:
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age
def sleep(self,time=None):
self.time=time
if self.time!=None:
if self.time>=3 and self.time<=5:
self.food='Mixed Veggies'
if self.time>=6 and self.time<=8:
self.food='Eggplant amp; Tofu'
if self.time>=9 and self.time<=11:
self.food='Broccoli Chicken'
print('{} sleeps {} hours daily and should have {}'.format(self.name,self.time,self.food))
else:
print("{}'s duration is unknown thus should have only bamboo leaves".format(self.name))
panda1=Panda("Kunfu","Male", 5)
panda2=Panda("Pan Pan","Female",3)
panda3=Panda("Ming Ming","Female",8)
panda2.sleep(10)
panda1.sleep(4)
panda3.sleep()
Комментарии:
1. Спасибо, не заметил этого до того, как на это указали.
Ответ №2:
Таким образом, первый оператор печати связан с print
функцией в sleep
методе. None
Печатается так же, как и у вас print(panda1.sleep())
. sleep
Метод ничего не возвращает, и, следовательно, None
.
Чтобы избавиться от None
, вы можете просто использовать panda1.sleep()
вместо print(panda1.sleep())
.
Однако лучшей альтернативой может быть возврат сообщения, которое вы хотите, чтобы ваша sleep
функция напечатала, а затем использование print(panda1.sleep())
Комментарии:
1. стандартный ввод имел
print(panda1.sleep())
и тому подобное, так чтоreturn
in method — это правильный путь для меня