How to set a class inheritance at instance creation? | | |
Hi I wonder if you can set what subclass a class should
have at instance creation.
The problem is that I have something like:
class CoreLang():
def AssignVar(self, var, value):
pass
class Lang1(CoreLang):
def AssignVar(self, var, value):
return var, "=", value
class Lang2(CoreLang):
def AssignVar(self, var, value):
return var, "<=", value
class WriteStruct():
def Generate(self, vars):
for var in vars:
print self.AssignVar()
The problem is that I want WriteStruct to sometimes be a subclass of
Lang1 and sometimes
of Lang2.
In the above example I could but the Generate Method in CoreLang. But
in my real
example I also want to able to subclass WriteStruct to be able to easy
customize WriteStruct.
Which I wouldnt be able to do if it was a method in CoreLang.
So in code I would like to write something like:
WriteStruct(Lang1).Generate(vars)
Even better would be that if I in the Lang1 class could
just do WriteStruct().Generate(vars) and Lang1 class would
magically make WriteStruct a subclass of itself.
Cheers,
/T | | | | re: How to set a class inheritance at instance creation?
On May 29, 8:52 pm, glomde <tbr...@yahoo.comwrote: Quote:
Hi I wonder if you can set what subclass a class should
have at instance creation.
>
The problem is that I have something like:
>
class CoreLang():
def AssignVar(self, var, value):
pass
>
class Lang1(CoreLang):
def AssignVar(self, var, value):
return var, "=", value
>
class Lang2(CoreLang):
def AssignVar(self, var, value):
return var, "<=", value
>
class WriteStruct():
def Generate(self, vars):
for var in vars:
print self.AssignVar()
>
The problem is that I want WriteStruct to sometimes be a subclass of
Lang1 and sometimes
of Lang2.
In the above example I could but the Generate Method in CoreLang. But
in my real
example I also want to able to subclass WriteStruct to be able to easy
customize WriteStruct.
Which I wouldnt be able to do if it was a method in CoreLang.
>
So in code I would like to write something like:
>
WriteStruct(Lang1).Generate(vars)
class WriteStruct:
def __init__(self, SubClass):
self._sub = SubClass()
def Generate(self, vars):
for var in vars:
print self._sub.AssignVar()
This does what you want but isn't inheritance. Quote:
Even better would be that if I in the Lang1 class could
just do WriteStruct().Generate(vars) and Lang1 class would
magically make WriteStruct a subclass of itself.
>
I don't think I understood what you want here.
Ram | | | | re: How to set a class inheritance at instance creation?
Why not just have Lang1 and Lang2 inherit from WriteStruct as well?
On May 29, 8:52 am, glomde <tbr...@yahoo.comwrote: Quote:
Hi I wonder if you can set what subclass a class should
have at instance creation.
>
The problem is that I have something like:
>
class CoreLang():
def AssignVar(self, var, value):
pass
>
class Lang1(CoreLang):
def AssignVar(self, var, value):
return var, "=", value
>
class Lang2(CoreLang):
def AssignVar(self, var, value):
return var, "<=", value
>
class WriteStruct():
def Generate(self, vars):
for var in vars:
print self.AssignVar()
>
The problem is that I want WriteStruct to sometimes be a subclass of
Lang1 and sometimes
of Lang2.
In the above example I could but the Generate Method in CoreLang. But
in my real
example I also want to able to subclass WriteStruct to be able to easy
customize WriteStruct.
Which I wouldnt be able to do if it was a method in CoreLang.
>
So in code I would like to write something like:
>
WriteStruct(Lang1).Generate(vars)
>
Even better would be that if I in the Lang1 class could
just do WriteStruct().Generate(vars) and Lang1 class would
magically make WriteStruct a subclass of itself.
>
Cheers,
>
/T
| | | | re: How to set a class inheritance at instance creation?
On 29 Maj, 19:27, "shand...@gmail.com" <shand...@gmail.comwrote: Quote:
Why not just have Lang1 and Lang2 inherit from WriteStruct as well?
This wont work I think since if add antoher Class:
class WriteStruct():
def func1(self);
print "Hello2"
def Generate(self):
self.func1()
class WriteStruct2(WriteStruct):
def func1(self);
print "Hello"
def Generate(self):
self.func1()
Den if Lang1, inherit both WriteStruct and WriteStruct2 I will
get name clashes.
In my real code I have very big Generate Method in WriteStruct that
calls submethods.
and thes submethods should be overriden by the subclasses. So I cant
change the name
on the submethods. Quote:
>
On May 29, 8:52 am, glomde <tbr...@yahoo.comwrote:
> Quote:
Hi I wonder if you can set what subclass a class should
have at instance creation.
> Quote:
The problem is that I have something like:
> Quote:
class CoreLang():
def AssignVar(self, var, value):
pass
> Quote:
class Lang1(CoreLang):
def AssignVar(self, var, value):
return var, "=", value
> Quote:
class Lang2(CoreLang):
def AssignVar(self, var, value):
return var, "<=", value
> Quote:
class WriteStruct():
def Generate(self, vars):
for var in vars:
print self.AssignVar()
> Quote:
The problem is that I want WriteStruct to sometimes be a subclass of
Lang1 and sometimes
of Lang2.
In the above example I could but the Generate Method in CoreLang. But
in my real
example I also want to able to subclass WriteStruct to be able to easy
customize WriteStruct.
Which I wouldnt be able to do if it was a method in CoreLang.
> Quote:
So in code I would like to write something like:
> Quote:
WriteStruct(Lang1).Generate(vars)
> Quote:
Even better would be that if I in the Lang1 class could
just do WriteStruct().Generate(vars) and Lang1 class would
magically make WriteStruct a subclass of itself.
> > | | | | re: How to set a class inheritance at instance creation?
On 29 Maj, 19:20, Ramashish Baranwal <ramashish.li...@gmail.com>
wrote: Quote:
On May 29, 8:52 pm, glomde <tbr...@yahoo.comwrote:
>
>
> Quote:
Hi I wonder if you can set what subclass a class should
have at instance creation.
> Quote:
The problem is that I have something like:
> Quote:
class CoreLang():
def AssignVar(self, var, value):
pass
> Quote:
class Lang1(CoreLang):
def AssignVar(self, var, value):
return var, "=", value
> Quote:
class Lang2(CoreLang):
def AssignVar(self, var, value):
return var, "<=", value
> Quote:
class WriteStruct():
def Generate(self, vars):
for var in vars:
print self.AssignVar()
> Quote:
The problem is that I want WriteStruct to sometimes be a subclass of
Lang1 and sometimes
of Lang2.
In the above example I could but the Generate Method in CoreLang. But
in my real
example I also want to able to subclass WriteStruct to be able to easy
customize WriteStruct.
Which I wouldnt be able to do if it was a method in CoreLang.
> Quote:
So in code I would like to write something like:
> Quote:
WriteStruct(Lang1).Generate(vars)
>
class WriteStruct:
def __init__(self, SubClass):
self._sub = SubClass()
def Generate(self, vars):
for var in vars:
print self._sub.AssignVar()
>
This does what you want but isn't inheritance.
This would work I think. Thanks. Quote:
> Quote:
Even better would be that if I in the Lang1 class could
just do WriteStruct().Generate(vars) and Lang1 class would
magically make WriteStruct a subclass of itself.
>
I don't think I understood what you want here.
>
I just dont want to pass the class in the instancecreation.
Somhehow in my:
class Lang1(CoreLang):
def Function(self):
WriteStruct().Generate()
Then somehow this WriteStruct should magically know that has been
instantiated in Lang1.
But this is not really needed. Just wondered if it was possible. | | | | re: How to set a class inheritance at instance creation?
On May 29, 8:52 pm, glomde <tbr...@yahoo.comwrote: Quote:
Hi I wonder if you can set what subclass a class should
have at instance creation.
>
The problem is that I have something like:
>
class CoreLang():
def AssignVar(self, var, value):
pass
>
class Lang1(CoreLang):
def AssignVar(self, var, value):
return var, "=", value
>
class Lang2(CoreLang):
def AssignVar(self, var, value):
return var, "<=", value
>
class WriteStruct():
def Generate(self, vars):
for var in vars:
print self.AssignVar()
>
The problem is that I want WriteStruct to sometimes be a subclass of
Lang1 and sometimes
of Lang2.
In the above example I could but the Generate Method in CoreLang. But
in my real
example I also want to able to subclass WriteStruct to be able to easy
customize WriteStruct.
Which I wouldnt be able to do if it was a method in CoreLang.
>
So in code I would like to write something like:
>
WriteStruct(Lang1).Generate(vars)
class WriteStruct:
def __init__(self, SubClass):
self._sub = SubClass()
def Generate(self, vars):
for var in vars:
print self._sub.AssignVar() Quote:
Even better would be that if I in the Lang1 class could
just do WriteStruct().Generate(vars) and Lang1 class would
magically make WriteStruct a subclass of itself.
>
I don't think I understood what you want here.
Ram | | | | re: How to set a class inheritance at instance creation?
glomde schrieb: Quote:
Hi I wonder if you can set what subclass a class should
have at instance creation.
>
The problem is that I have something like:
>
class CoreLang():
def AssignVar(self, var, value):
pass
>
class Lang1(CoreLang):
def AssignVar(self, var, value):
return var, "=", value
>
class Lang2(CoreLang):
def AssignVar(self, var, value):
return var, "<=", value
>
class WriteStruct():
def Generate(self, vars):
for var in vars:
print self.AssignVar()
>
The problem is that I want WriteStruct to sometimes be a subclass of
Lang1 and sometimes
of Lang2.
In the above example I could but the Generate Method in CoreLang. But
in my real
example I also want to able to subclass WriteStruct to be able to easy
customize WriteStruct.
Which I wouldnt be able to do if it was a method in CoreLang.
>
So in code I would like to write something like:
>
WriteStruct(Lang1).Generate(vars)
>
Even better would be that if I in the Lang1 class could
just do WriteStruct().Generate(vars) and Lang1 class would
magically make WriteStruct a subclass of itself.
>
>
Cheers,
>
/T
>
If you really need to inherit at runtime, you could utilize `type()`. Quote: Quote: Quote:
>>def foo(self, blah):
.... print self, blah
.... Quote: Quote: Quote:
>>attrs = {'foo': foo}
>>cls = type('MyCls', (object,), attrs)
>>cls().foo(4)
<__main__.MyCls object at 0x009E86D04
Changing ``object`` (the tuple contains all bases) will change the
parent. But, better stick to previous solutions. :)
Stargaming | | | | re: How to set a class inheritance at instance creation?
glomde wrote: Quote:
Hi I wonder if you can set what subclass a class should
have at instance creation.
>
The problem is that I have something like:
>
class CoreLang():
def AssignVar(self, var, value):
pass
>
class Lang1(CoreLang):
def AssignVar(self, var, value):
return var, "=", value
>
class Lang2(CoreLang):
def AssignVar(self, var, value):
return var, "<=", value
>
class WriteStruct():
def Generate(self, vars):
for var in vars:
print self.AssignVar()
>
The problem is that I want WriteStruct to sometimes be a subclass of
Lang1 and sometimes
of Lang2.
In the above example I could but the Generate Method in CoreLang. But
in my real
example I also want to able to subclass WriteStruct to be able to easy
customize WriteStruct.
Which I wouldnt be able to do if it was a method in CoreLang.
>
So in code I would like to write something like:
>
WriteStruct(Lang1).Generate(vars)
>
Even better would be that if I in the Lang1 class could
just do WriteStruct().Generate(vars) and Lang1 class would
magically make WriteStruct a subclass of itself.
>
>
You should rethink your program design.
It seems that when you create a WriteStruct you should really be passing
its __init__() method the class that you want it to be a "subclass" of,
creating an instance of that class, and then using generic delegation to
that subclass (using a modified __getattr__()) to handle methods that
aren't found in the WriteStruct.
I can see there are circumstances in which this might not work, but I
believe your current ugly intentions reveal a design smell that you
really need to get rid of if you want a clean program.
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
------------------ Asciimercial ---------------------
Get on the web: Blog, lens and tag your way to fame!!
holdenweb.blogspot.com squidoo.com/pythonology
tagged items: del.icio.us/steve.holden/python
All these services currently offer free registration!
-------------- Thank You for Reading ---------------- | | | | re: How to set a class inheritance at instance creation?
glomde wrote: Quote:
Hi I wonder if you can set what subclass a class should
have at instance creation.
>
The problem is that I have something like:
>
class CoreLang():
def AssignVar(self, var, value):
pass
>
class Lang1(CoreLang):
def AssignVar(self, var, value):
return var, "=", value
>
class Lang2(CoreLang):
def AssignVar(self, var, value):
return var, "<=", value
>
class WriteStruct():
def Generate(self, vars):
for var in vars:
print self.AssignVar()
>
The problem is that I want WriteStruct to sometimes be a subclass of
Lang1 and sometimes
of Lang2.
In the above example I could but the Generate Method in CoreLang. But
in my real
example I also want to able to subclass WriteStruct to be able to easy
customize WriteStruct.
Which I wouldnt be able to do if it was a method in CoreLang.
>
So in code I would like to write something like:
>
WriteStruct(Lang1).Generate(vars)
>
Even better would be that if I in the Lang1 class could
just do WriteStruct().Generate(vars) and Lang1 class would
magically make WriteStruct a subclass of itself.
>
>
You should rethink your program design.
It seems that when you create a WriteStruct you should really be passing
its __init__() method the class that you want it to be a "subclass" of,
creating an instance of that class, and then using generic delegation to
that subclass (using a modified __getattr__()) to handle methods that
aren't found in the WriteStruct.
I can see there are circumstances in which this might not work, but I
believe your current ugly intentions reveal a design smell that you
really need to get rid of if you want a clean program.
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
------------------ Asciimercial ---------------------
Get on the web: Blog, lens and tag your way to fame!!
holdenweb.blogspot.com squidoo.com/pythonology
tagged items: del.icio.us/steve.holden/python
All these services currently offer free registration!
-------------- Thank You for Reading ---------------- | | | | re: How to set a class inheritance at instance creation?
On 29 Maj, 22:45, Steve Holden <s...@holdenweb.comwrote: Quote:
glomde wrote: Quote:
Hi I wonder if you can set what subclass a class should
have at instance creation.
> Quote:
The problem is that I have something like:
> Quote:
class CoreLang():
def AssignVar(self, var, value):
pass
> Quote:
class Lang1(CoreLang):
def AssignVar(self, var, value):
return var, "=", value
> Quote:
class Lang2(CoreLang):
def AssignVar(self, var, value):
return var, "<=", value
> Quote:
class WriteStruct():
def Generate(self, vars):
for var in vars:
print self.AssignVar()
> Quote:
The problem is that I want WriteStruct to sometimes be a subclass of
Lang1 and sometimes
of Lang2.
In the above example I could but the Generate Method in CoreLang. But
in my real
example I also want to able to subclass WriteStruct to be able to easy
customize WriteStruct.
Which I wouldnt be able to do if it was a method in CoreLang.
> Quote:
So in code I would like to write something like:
> Quote:
WriteStruct(Lang1).Generate(vars)
> Quote:
Even better would be that if I in the Lang1 class could
just do WriteStruct().Generate(vars) and Lang1 class would
magically make WriteStruct a subclass of itself.
>
You should rethink your program design.
>
It seems that when you create a WriteStruct you should really be passing
its __init__() method the class that you want it to be a "subclass" of,
creating an instance of that class, and then using generic delegation to
that subclass (using a modified __getattr__()) to handle methods that
aren't found in the WriteStruct.
This is what I am going to do. For some reason I got stuck to think
I needed to solve it with inheritance.
Didnt think of the possibility to modify getattr to make
the delegation be much nicer. Thanks for the tip Quote:
>
I can see there are circumstances in which this might not work, but I
believe your current ugly intentions reveal a design smell that you
really need to get rid of if you want a clean program.
>
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
------------------ Asciimercial ---------------------
Get on the web: Blog, lens and tag your way to fame!!
holdenweb.blogspot.com squidoo.com/pythonology
tagged items: del.icio.us/steve.holden/python
All these services currently offer free registration!
-------------- Thank You for Reading ----------------
|  | | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 226,223 network members.
|