2016-03-19 2 views
1

Не знаете, как правильно это выразить, но вот сделка. У меня есть сценарий, где каждая переменная определена глобально, но позже я хочу преобразовать скрипт в класс для лучшей инкапсуляции.переименовать переменные класса в python без самозапуска

Однако все переменные, которые я использовал в скрипте, необходимо преобразовать в переменные объекта. Я изменил бы что-то вроде

x = 5 

в

self.x = 5 

И после того, как делать, что все функции в сценарии должны быть превращены в методы класса, однако, большинство методов являются математические формулы и рефакторинга что-то, как чистый, как

z = x ** y + x 

в

z = self.x ** self.y + self.x 

действительно болит читаемость.

Так как решение этого я печатали эти действительно неудобные повторное присвоение имен в начале методов:

def method(self, ...): 
    x = self.x 
    y = self.y 
    ... 

Это делает формулы для чтения, но печатая все, что повторное именование действительно болезненное , есть ли более элегантный способ сделать это?

ответ

3

self - только рекомендуемое название. Я бы посоветовал вам использовать его, но в некоторых случаях лучше его укоротить.

class A: 
    x = None 
    y = None 

    def calculate_z(s): 
     return s.x ** s.y + s.x 

foo = A() 
foo.x = 4 
foo.y = 2 
foo.calculate_z() # 20 

Удовлетворительный факт: вы даже можете использовать символы Юникода, такие как ® (в Python 3, то есть).

def calculate_z(®): 
    return ®.x ** ®.y + ®.x 
0

Ну, могут быть какие-то другие решения, но они все уродливые хаки. Вы можете сделать код, возможно, менее неудобно, используя множественное присваивание, хотя:

x, y = self.x, self.y 

Кроме x и y быстрее использовать в CPython, чем self.x и self.y, потому что последние из них потребуется дорогостоящий поиск атрибутов для каждого использовать.

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