Seite 1 von 1

Functions in anderen modulen neu definieren

Verfasst: Freitag 20. April 2012, 13:06
von DaRealFreak

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: latin-1 -*-
import testfunc

class MyTest(object):
	def SetNewFunction(self):
		testfunc.TestClass = NewClass

	def NewFunction(self):
		print("nomöp")

class NewClass(object):
	def MyNewFunc(self):
		print("new")
		
MyTest().SetNewFunction()
testfunc.TestClass().MyNewFunc()
Ersetzt ja die gesamte class, sobald ich das aber auf functions probiere aka:

Einmal auf Funktions probiert

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: latin-1 -*-
import testfunc

class MyTest(object):
	def SetNewFunction(self):
		testfunc.TestClass().MyOldFunc = self.NewFunction

	def NewFunction(self):
		print("nomöp")

MyTest().SetNewFunction()
testfunc.TestClass().MyOldFunc()

Gibt es die Möglichkeit die functions in einer anderen class neu zu definieren ohne direkt die gesamte class ersetzen zu müssen?
Also dass ich z.b. direkt MyOldFunc(printed bisher einfach nur "old") so ersetzen kann, dass es "new" printed.


Wäre echt gut, wenn mir da jemand weiter helfen könnte^^


Edit:
Problem FAST solved

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: latin-1 -*-
class TestClass:
        def OldFunc(self):
                print "Hello from original method", self

def NewFunc(self):
        print "Hello from NewFunc of object", self

#Getting Instancetype
instancemethod = type (TestClass.OldFunc)

#Keeping old Function as backup
OldMethode = TestClass().OldFunc

#Redefining new def :>
TestClass.OldFunc = instancemethod (NewFunc, None, TestClass)

#Calling both methods
OldMethode()
TestClass().OldFunc ()
kann in anderen classes die funcs ersetzen/überschreiben, in anderen modulen klappts aber noch nicht :<

MfG DaRealFreak

Re: Functions in anderen modulen neu definieren

Verfasst: Freitag 20. April 2012, 16:18
von BlackJack
@DaRealFreak: Du darfst halt nicht die Methode auf einem *Exemplar* der Klasse `testfunc.TestClass` ersetzen, sondern musst das auf der *Klasse* selbst tun.

Re: Functions in anderen modulen neu definieren

Verfasst: Freitag 20. April 2012, 16:33
von DaRealFreak
SOOO endlich hats geklappt mit Hilfe des types modules :>

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: latin-1 -*-
import testfunc
import types

#New function
def NewFunc(self):
	print("This is the new function :>")

#Define class
externclass = testfunc.TestFunctionClass()

#Call the old function
externclass.OldFunction()

#Change old to new function
NewFunction = types.MethodType(NewFunc, externclass, testfunc.TestFunctionClass)
externclass.OldFunction = NewFunction


#Call the new defined function
externclass.OldFunction()
Nur zur Vollständigkeit halber noch die class/func im testfunc module:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: latin-1 -*-

class TestFunctionClass():
	def OldFunction(self):
		print("This is the old function :<")

Das ganze klappt (gottseidank) inzwischen komplett und ich kann die Func beliebig gestalten :>

MfG DaRealFreak