Functions in anderen modulen neu definieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DaRealFreak
User
Beiträge: 10
Registriert: Freitag 20. April 2012, 12:54

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
Zuletzt geändert von DaRealFreak am Freitag 20. April 2012, 22:18, insgesamt 2-mal geändert.
BlackJack

@DaRealFreak: Du darfst halt nicht die Methode auf einem *Exemplar* der Klasse `testfunc.TestClass` ersetzen, sondern musst das auf der *Klasse* selbst tun.
DaRealFreak
User
Beiträge: 10
Registriert: Freitag 20. April 2012, 12:54

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
Antworten