Есть несколько причин, по которым глобальные переменные плохие . Во-первых, у вас появляется привычка объявлять глобальные переменные, что не является хорошей практикой, хотя в некоторых случаях имеют смысл глобальные переменные - например, PI. Глобалы также создают проблемы, когда вы намеренно или случайно используете имя локально. Или хуже, когда вы думаете , что используете имя локально, но в действительности вы присваиваете новое значение глобальной переменной. Эта конкретная проблема зависит от языка, и python обрабатывает ее по-разному в разных случаях.
class A:
def __init__(self):
self.name = 'hi'
x = 3
a = A()
def foo():
a.name = 'Bedevere'
x = 9
foo()
print x, a.name #outputs 3 Bedevere
Преимущество создания класса и передачи вашего класса состоит в том, что вы получите определенное постоянное поведение, тем более что вам следует вызывать методы класса, которые работают с самим классом.
class Knights:
def __init__(self, name='Bedevere'):
self.name = name
def knight(self):
self.name = 'Sir ' + self.name
def speak(self):
print self.name + ":", "Run away!"
class FerociousRabbit:
def __init__(self):
self.death = "awaits you with sharp pointy teeth!"
def speak(self):
print "Squeeeeeeee!"
def cave(thing):
thing.speak()
if isinstance(thing, Knights):
thing.knight()
def scene():
k = Knights()
k2 = Knights('Launcelot')
b = FerociousRabbit()
for i in (b, k, k2):
cave(i)
Этот пример иллюстрирует несколько хороших принципов. Во-первых, сила Python при вызове функций - FerociousRabbit и Knights - это два разных класса, но они имеют одинаковую функцию speak (). В других языках, чтобы сделать что-то подобное, им, по крайней мере, нужно было бы иметь один и тот же базовый класс. Причина, по которой вы захотите сделать это, заключается в том, что вы можете написать функцию (пещеру), которая может работать с любым классом, имеющим метод speak (). Вы можете создать любой другой метод и передать его функции пещеры:
class Tim:
def speak(self):
print "Death awaits you with sharp pointy teeth!"
Так что в вашем случае, когда вы имеете дело с elementTree, скажите, что когда-нибудь в будущем вам нужно также начать анализировать журнал apache. Хорошо, если вы делаете чисто функциональную программу, вы в основном работаете. Вы можете изменять и расширять свою текущую программу, но если вы хорошо написали свои функции, вы можете просто добавить новый класс в смесь, и (технически) все будет очень увлекательно.