Итак, в основном мой код печатает None после печати инструкции, которую я хочу, чтобы она печатала. Как я могу остановить печать этого None

#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) не заключая его в print команду. поскольку sleep нет функции возврата, она неявно возвращает None . таким образом, print вызовы печатают 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 — это правильный путь для меня