Найти - Пользователи
Полная версия: Не определяется глобальная переменная заданная в классе
Начало » Python для новичков » Не определяется глобальная переменная заданная в классе
1
BossBox
from Avatar import PlayerAvatar
class AAA(object):
	def __init__(self):
		pass
	
	pre_onEnterWorld_init = PlayerAvatar.onEnterWorld
	pre_onLeaveWorld_init = PlayerAvatar.onLeaveWorld
	def new_onEnterWorld_init(current, prereqs):
            pre_onEnterWorld_init(current, prereqs)
            self.currentPlayer = BigWorld.player()
	
	def new_onLeaveWorld_init(self):
		pre_onLeaveWorld_init(self)
	PlayerAvatar.onEnterWorld = new_onEnterWorld_init
	PlayerAvatar.onLeaveWorld = new_onLeaveWorld_init
AAA()

В итоге ругается на:

*** File "", line 34, in new_onEnterWorld_init
*** NameError: global name 'pre_onEnterWorld_init' is not defined
FishHook
Внутри метода ты имеешь объект, а pre_onLeaveWorld_init описана в пространстве имен класса.
То есть обращаться к ней нужно через объект
self.pre_onLeaveWorld_init(self)
BossBox
class AAA(object):
	onEnterWorld_init = PlayerAvatar.onEnterWorld
	onLeaveWorld_init = PlayerAvatar.onLeaveWorld
	def new_onEnterWorld_init(cur, prereqs):
		sel.onEnterWorld_init(sel, prereqs)
	PlayerAvatar.onEnterWorld = new_onEnterWorld_init
	PlayerAvatar.onLeaveWorld = new_onLeaveWorld_init
AAA()

*** Traceback (most recent call last):
*** File “”, line 32, in new_onEnterWorld_init
*** NameError: global name ‘sel’ is not defined
FishHook
Как-то не ожидаешь увидеть незнание основополагающих принципов языка от человека, изучающего его минимум полгода.

def new_onEnterWorld_init(current, prereqs):
pre_onEnterWorld_init(current, prereqs)
self.currentPlayer = BigWorld.player()

Объяснять вам, что такое self, и зачем он нужен, не буду из принципа.
BossBox
Сообщение предыдущие еще раз посмотрите, вы не тот код мне показываете.
FishHook
ОК, вот нужный код.
Если вы мне немедленно не объясните, где вы определяете переменную sel, перед тем как использовать, забаню нафиг.

class AAA(object):
	onEnterWorld_init = PlayerAvatar.onEnterWorld
	onLeaveWorld_init = PlayerAvatar.onLeaveWorld
	def new_onEnterWorld_init(cur, prereqs):
		sel.onEnterWorld_init(sel, prereqs)
	PlayerAvatar.onEnterWorld = new_onEnterWorld_init
	PlayerAvatar.onLeaveWorld = new_onLeaveWorld_init
FishHook
Не объяснил
Забанен за тупость
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB