A python object: It can be everything!
18 Jun 2009 Geng Wang project
The code is like this:
class unknown_obj(object):
def __call__(self, *arg): return unknown_obj()
def __getitem__(self, key): return unknown_obj()
def __getattr__(self, name): return unknown_obj()
The three methods are: __call__ for function calls (*arg means arg is the argument list), __getitem__ for the visit to members using ‘[]’, such as a[3] and 3 is the key, __getattr__ just like we mentioned, for any visit to members using ‘.’. So almost every kind of codes is legal to an object like this. For example:
>»a = unknown_obj()
>»print a.b[123].c[‘abc’].d(456, ‘def’).e
<__main__.unknown_obj object at 0xb76b552c>
If we want to know exactly which member is called, we can modify the code above, like this:
class unknown_obj(object):
def __call__(self, *arg):
print arg
return unknown_obj()
def __getitem__(self, key):
print key
return unknown_obj()
def __getattr__(self, name):
print name
return unknown_obj()
>»a = unknown_obj()
>»print a.b[123].c[‘abc’].d(456, ‘def’).e
b
123
c
abc
d
(456, ‘def’)
e
<__main__.unknown_obj object at 0xb76b564c>
Such an object can be used for a COM simulation, so we don’t need to implement everything for every kinds of COM, and a call to a function can be output for further analyze.