mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -04:00
cache results of __getattr__ for performance
This commit is contained in:
parent
17f51995e3
commit
328f834f55
@ -149,13 +149,16 @@ class panda3d_submodule(type(sys)):
|
|||||||
for obj in dir(mod):
|
for obj in dir(mod):
|
||||||
if not obj.startswith("__"):
|
if not obj.startswith("__"):
|
||||||
everything.append(obj)
|
everything.append(obj)
|
||||||
|
self.__all__ = everything
|
||||||
return everything
|
return everything
|
||||||
elif name == "__library__":
|
elif name == "__library__":
|
||||||
return self.__library__
|
return self.__library__
|
||||||
elif name == "__libraries__":
|
elif name == "__libraries__":
|
||||||
return self.__libraries__
|
return self.__libraries__
|
||||||
elif name in dir(mod):
|
elif name in dir(mod):
|
||||||
return mod.__dict__[name]
|
value = mod.__dict__[name]
|
||||||
|
setattr(self, name, value)
|
||||||
|
return value
|
||||||
|
|
||||||
# Not found? Raise the error that Python would normally raise.
|
# Not found? Raise the error that Python would normally raise.
|
||||||
raise AttributeError, "'module' object has no attribute '%s'" % name
|
raise AttributeError, "'module' object has no attribute '%s'" % name
|
||||||
@ -189,6 +192,7 @@ class panda3d_multisubmodule(type(sys)):
|
|||||||
for obj in dir(self.__manager__.libimport(lib)):
|
for obj in dir(self.__manager__.libimport(lib)):
|
||||||
if not obj.startswith("__"):
|
if not obj.startswith("__"):
|
||||||
everything.append(obj)
|
everything.append(obj)
|
||||||
|
self.__all__ = everything
|
||||||
return everything
|
return everything
|
||||||
elif name == "__libraries__":
|
elif name == "__libraries__":
|
||||||
return self.__libraries__
|
return self.__libraries__
|
||||||
@ -196,7 +200,9 @@ class panda3d_multisubmodule(type(sys)):
|
|||||||
for lib in self.__libraries__:
|
for lib in self.__libraries__:
|
||||||
mod = self.__manager__.libimport(lib)
|
mod = self.__manager__.libimport(lib)
|
||||||
if name in dir(mod):
|
if name in dir(mod):
|
||||||
return mod.__dict__[name]
|
value = mod.__dict__[name]
|
||||||
|
setattr(self, name, value)
|
||||||
|
return value
|
||||||
|
|
||||||
# Not found? Raise the error that Python would normally raise.
|
# Not found? Raise the error that Python would normally raise.
|
||||||
raise AttributeError, "'module' object has no attribute '%s'" % name
|
raise AttributeError, "'module' object has no attribute '%s'" % name
|
||||||
@ -222,11 +228,14 @@ class panda3d_module(type(sys)):
|
|||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
if name == "__all__":
|
if name == "__all__":
|
||||||
|
self.__all__ = name
|
||||||
return self.modules.keys()
|
return self.modules.keys()
|
||||||
elif name == "__file__":
|
elif name == "__file__":
|
||||||
return self.__file__
|
return self.__file__
|
||||||
elif name in self.modules:
|
elif name in self.modules:
|
||||||
return self.__manager__.sys.modules["panda3d.%s" % name]
|
value = self.__manager__.sys.modules["panda3d.%s" % name]
|
||||||
|
setattr(self, name, value)
|
||||||
|
return value
|
||||||
|
|
||||||
# Not found? Raise the error that Python would normally raise.
|
# Not found? Raise the error that Python would normally raise.
|
||||||
raise AttributeError, "'module' object has no attribute '%s'" % name
|
raise AttributeError, "'module' object has no attribute '%s'" % name
|
||||||
|
Loading…
x
Reference in New Issue
Block a user