2016-02-14 1 views
-2

Предположим, этот класс ...Python - Как использовать атрибуты одного метода в другой метод

Class feed(object): 

    def __init__ (self, food=0) : 
     self.food = food 
    def fill(self, water = 0): 
     self.food +=1 
     self.water +=1 

Как я создать еще один метод, который будет использовать «воды», атрибут метода «заливки» без учета воды в конструкторе

+0

Вы просто * пробовали делать это *? Если у вас есть методы с использованием атрибутов, которые не были определены в '__init__', что, если они выполняются в другом порядке с тем, который вы ожидаете? Также обратите внимание, что это 'class' (Python чувствителен к регистру), и вы должны прочитать https://www.python.org/dev/peps/pep-0008/ – jonrsharpe

+0

Вопрос для меня совершенно неясен. – timgeb

+0

@timegeb это так просто, как это ... создать другой метод и найти способ включить атрибут «вода» (атрибут метода «fill») в методе – Qudus

ответ

1

После того, как вы заявляете self.food или self.water, эти атрибуты всего объекта, а не только метод, который они были объявлены в. до тех пор пока вы разбираете self к новому методу класса , он может получить доступ ко всем атрибутам объект с помощью ссылки self.food, self.water и т.д. Например:

class feed(object): 

    # other functions 

    def new_method(self): 
     #This can now reference other object attributes 

Однако, как отметил @jonrsharpe в комментариях, убедитесь, что порядок, в котором выполняются методы не приводят к способу пытается ссылаться атрибут, который еще не был объявлен. Хорошей практикой является определение всех атрибутов в методе __init__ класса. В настоящее время вы не объявляете self.water перед вызовом self.water += 1, что поднимет AttributeError из-за того, что атрибут self.water ссылается перед назначением. Вот как это сделать:

class feed(object): 

    def __init__ (self, food = 0, water = 0) : 
     self.food = food 
     self.water = water 

    def fill(self): 
     self.food += 1 
     self.water += 1 
+0

Ну, вы * можете * поймать AttributeError – timgeb

+0

@timgeb Не значит, что вам нужно ... –

+0

@R. Мюррей Спасибо – Qudus

Смежные вопросы