2012-01-17 4 views
1

У меня есть следующий класс, где я хочу использовать метод location_change в пределах __init__ для этого класса. Есть ли способ сделать это? Пример, который я использую ниже, - это упрощение, но мне нужно использовать метод класса для преобразования некоторых данных конструктора. Можно ли это сделать в python?Использование метода класса в __init__

class dummy: 

    def __init__(self): 

     self.location = 'USA' 
     print(self.location) 

     location_change() 
     print(self.location) 

    def location_change(): 

     self.location = 'UK' 


first_dummy = dummy() 
+3

Лучше назвать классы в CamelCase. – demalexx

+2

Кажется, существует некоторая путаница между _classmethods_ и _methods на classes_; к сожалению, они разные. – katrielalex

ответ

3

Попробуйте

class Dummy: 

    def __init__(self): 

     self.location = 'USA' 
     print(self.location) 

     self.location_change() 
     print(self.location) 

    def location_change(self): 

     self.location = 'UK' 


first_dummy = Dummy() 
5

Конечно, может!

self.location_change() 

Каждый метод в классе должен принимать по крайней мере один аргумент, который условно называется self.

def location_change(self): 

вводный учебник по ООП в Python http://www.voidspace.org.uk/python/articles/OOP.shtml

сдаточной документации http://docs.python.org/tutorial/classes.html

1
class Dummy: 

    def __init__(self): 

     self.location = 'USA' 
     print(self.location) 
     Dummy.location_change(self) 
     print(self.location) 

    def location_change(self): 

     self.location = 'UK' 


first_dummy = Dummy() 
print(first_dummy) 

Что вам нужно сделать, это сказать "location_change", что она работает с аргументом, сам. В противном случае это неопределенная переменная. Вы также должны использовать имя класса при вызове. Это должно дать вам:

USA 
UK 
<__main__.Dummy object at 0x1005ae1d0> 
+3

Зачем вам называть 'dummy.location_change (self)' вместо 'self.location_change()'? Таким образом, если подкласс реализует 'location_change', эта реализация не будет использоваться! –

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