Mir was gestern ein bisschen langweilig und hab ein Programm das mir automatisch get, set und del Methoden und dazugehoerige Properties generiert, z.B.
Code: Alles auswählen
class Game(object):
def __init__(self, id, serverip=None):
stdport = '28940'
self._id = id #P
self._players = [] #P
self._Field = Field(self.sock) #P
self._netPlayer = False #P
def test(self):
self._a = "hallo" #P
Daraus wird:
Code: Alles auswählen
# Generated code starting.
def set_id(self, value):
self._id = value
def get_id(self):
return self._id
def del_id(self):
del self._id
def set_players(self, value):
self._players = value
def get_players(self):
return self._players
def del_players(self):
del self._players
def set_Field(self, value):
self._Field = value
def get_Field(self):
return self._Field
def del_Field(self):
del self._Field
def set_netPlayer(self, value):
self._netPlayer = value
def get_netPlayer(self):
return self._netPlayer
def del_netPlayer(self):
del self._netPlayer
def set_a(self, value):
self._a = value
def get_a(self):
return self._a
def del_a(self):
del self._a
id = property(get_id, set_id, del_id)
players = property(get_players, set_players, del_players)
Field = property(get_Field, set_Field, del_Field)
netPlayer = property(get_netPlayer, set_netPlayer, del_netPlayer)
a = property(get_a, set_a, del_a)
#Generated code ends.
Die Einschraenkungen sind das das FILE eine Datei sein muss die nur eine Klasse enhaelt, das werde ich aber auch noch einbaun, das das anders geht...
Hier das Programm:
Code: Alles auswählen
import sys
setters = list()
getters = list()
properties = list()
dellers = list()
towrite = str()
def getamount(string):
i = 0
count = 0
while(i < len(string)):
if(string[i] == " "):
count+=1
else:
return count
i+=1
def getTabsize(file):
source = open ( file )
source = source.readlines()
i = 0
while(i < len(source)):
if source[i].startswith("\t"):
return "\t"
if("if" in source[i] or "while" in source[i] or "else" in source[i] or "class" in source[i] or "def" in source[i] and not getamount(source[i]) == getamount(source[i+1])):
tabsize=getamount(source[i+1])-getamount(source[i])
return tabsize
i+=1
def getTabs(filename):
global tab
global newline
tabs = getTabsize(filename)
if tabs != "\t":
tabs = " "*tabs
newlines = "\n"
tab = tabs
newline = newlines
def getParseVars(filename):
global filenames
filenames = filename
returnl = list()
fi = open ( filename ).readlines()
for line in fi:
if "self" in line and "#P" in line:
if line.endswith("\n"):
line = line[:-1]
splitline = line.split("=")
for elem in splitline:
if "self" in elem and not "#P" in elem and elem == splitline[0] \
and "_" in elem:
returnl.append(elem.strip())
return returnl
def getSetter(var):
vatsettername = getVarName(var)
setters.append( "%sdef set_%s(self, value):%s\
%s%s%s = value\n" % (tab,vatsettername, newline, tab, tab, var) )
def getGetter(var):
print 'getter'
varsettername = getVarName(var)
getters.append( "%sdef get_%s(self):%s\
%s%sreturn %s%s" %
(tab,varsettername,newline,tab,tab,var,newline) )
def getDeller(var):
print 'getter'
varsettername = getVarName(var)
dellers.append( "%sdef del_%s(self):%s%s%sdel %s\n" % (tab,varsettername, newline, tab, tab, var) )
def getProperty(var):
varsettername = getVarName(var)
properties.append("%s%s = property(get_%s, set_%s, del_%s)%s" %
(tab,varsettername,varsettername,varsettername,varsettername,newline))
def getVarName(var):
var = var.replace("self._","")
return var
def createLists(filename):
global varnames
varnames = list()
wrote = list()
for var in getParseVars(filename):
if not var in wrote:
varnames.append(var)
getSetter(var)
getGetter(var)
getProperty(var)
getDeller(var)
wrote.append(var)
def writeCode(filename):
towrite = "\n# Generated code starting.\n\n"
for i in range(len(getters)):
towrite+=setters[i]
towrite+=getters[i]
if dellers:
towrite+=dellers[i]
towrite+="\n"
for property in properties:
towrite+=property
towrite+="\n#Generated code ends.\n"
print towrite
fl = open ( filenames, "a")
fl.write(towrite)
fl.close()
def printVars():
for var in varnames:
print var
def help():
print "USAGE: %s [FILE] [OUTPUTFILE]" % sys.argv[0]
print "If no OUTPUTFILE is defined, the output is appended to FILE"
def do(filename ,writefilename=None):
if not writefilename:
writefilename = filename
print writefilename
getTabs(filename)
createLists(filename)
writeCode(writefilename)
if __name__ == "__main__":
argv = sys.argv[1:]
if len(argv) == 1:
do(argv[0])
elif len(argv) == 2:
do(argv[0],argv[1])
else:
print "Invalid amount of arguments passed"
help()