Getting the "dir" from the other ancestor ?

Stef Mientki stef.mientki at gmail.com
Tue Apr 28 17:58:02 CEST 2009


tuxagb wrote:
> On 28 Apr, 15:01, Stef Mientki <stef.mien... at gmail.com> wrote:
>   
>> 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.
>   
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



More information about the Python-list mailing list