Getting the "dir" from the other ancestor ?

S

Stef Mientki

hello,

I have a class, derived from some user defined class
(User_Defined_Ancestor) and some basic class (Basic_Ancestor).

One of the major tasks of the Basic_Ancestor,
is to hide all kinds of implementation details for the user,
so the user can concentrate on the functional design.

One of things I need to know are the methods and attributes of the
Basic_Ancestor.
Both classes are dynamic, i.e. attributes are added during run time.

class Master ( User_Defined_Ancestor, Basic_Ancestor ) :
def __init__ ( self, *args, **kwargs ) :
Basic_Ancestor.__init__ ( self, *args, **kwargs )
.....

class Basic_Ancestor ( object ) :
def __init__ ( self, .... ) :
self.other = dir ( User_Defined_Ancestor )

def Get_Attributes ( self ) :
return dir ( self ) - dir ( self.other )


Now the problem is, I don't know "User_Defined_Ancestor" in Basic_Ancestor.
I can't pass it through the parameter list, because I use "*args, **kwargs"
I possibly could use some global variable, but that's not my preference.

Any other suggestions ?

thanks,
Stef Mientki
 
T

tuxagb

hello,

I have a class, derived from some user defined class
(User_Defined_Ancestor) and some basic class (Basic_Ancestor).

One of the major tasks of the Basic_Ancestor,
is to hide all kinds of implementation details for the user,
so the user can concentrate on the functional design.

One of things I need to know are the methods and attributes of the
Basic_Ancestor.
Both classes are dynamic, i.e. attributes are added during run time.

class Master ( User_Defined_Ancestor, Basic_Ancestor ) :
    def __init__ ( self, *args, **kwargs ) :
        Basic_Ancestor.__init__ ( self, *args, **kwargs )
        .....

class Basic_Ancestor ( object ) :
    def __init__ ( self, .... ) :
        self.other = dir ( User_Defined_Ancestor )

    def Get_Attributes ( self ) :
        return dir ( self ) - dir ( self.other )

Now the problem is, I don't know "User_Defined_Ancestor" in Basic_Ancestor.
I can't pass it through the parameter list, because I use "*args, **kwargs"
I possibly could use some global variable, but that's not my preference.

Any other suggestions ?

thanks,
Stef Mientki

In anytime, if you do dir() in a class B, that extends a class A, you
have all fields of A also.

Example:
... def a(self):
... return 0 ... def b(self):
... return 5
>>> dir(A) [....., 'a']
>>> dir(B)
[......, 'a', 'b']

Hi.
 
S

Stef Mientki

tuxagb said:
In anytime, if you do dir() in a class B, that extends a class A, you
have all fields of A also.
That's exactly the problem I encounter ;-)
After some trial and error, I found this solution:

class Basic_Ancestor ( object ) :
def __init__ ( self, .... ) :
# Collect all methods and attributes of other classes
self.Exclude_Dir = []
Base_Classes = self.__class__.__bases__
for BC in Base_Classes :
if BC != My_Control_Class :
self.Exclude_Dir += dir ( BC )


cheers,
Stef
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top