[Tutor] question about "hiding" a function/method in a class
Mike Hansen
mhansen at cso.atmel.com
Fri Jun 3 15:17:38 CEST 2005
I haven't done much OO in Python yet. For various web apps we write, we usually
write up a DB schema in a spreadsheet. Then we write the sql script that would
create the tables in the database. I thought it would be neat to save the
spreadsheet as a csv file and have python write the sql script. So I started to
write the Python program.
---------------------
#!/usr/bin/env python
"""
SQLGEN takes a csv file of a database schema and writes the sql script that will
create the
tables and fields in the database
Mike Hansen Jun 2005
"""
class DBField(object):
def __init__(self, fieldName):
self.fieldName = fieldName
self.type = ""
self.size = 0
self.notNull = False
self.unique = False
self.references = ""
self.default = ""
def printField(self):
self.fieldStr = " %s %s" %(self.fieldName, self.type)
if self.size > 0:
self.fieldStr = "%s(%s)" %(self.fieldStr, self.size)
if self.notNull:
self.fieldStr = "%s NOT NULL" %self.fieldStr
if self.unique:
self.fieldStr = "%s UNIQUE" %self.fieldStr
if self.default:
self.fieldStr = "%s DEFAULT %s" %(self.fieldStr, self.default)
# if self.references
return self.fieldStr
def __getattr__(self, attrname):
if attrname == "fieldStr":
return self.printField()
else:
raise AttributeError, attrname
def main():
pass
def test():
areas = DBField("area")
areas.type = "VARCHAR"
areas.size = 80
areas.notNull = True
areas.unique = True
print areas.fieldStr
stuff = DBField("stuff")
stuff.type = "INTEGER"
stuff.notNull = True
print stuff.fieldStr
if __name__ == "__main__":
# main()
test()
---------------------------
I was wondering if I should "hide" the printField function, so I or someone else
won't do x.printField() in the main program but use the x.fieldStr attribute. If
so, how would I do that, def __printField(self):? How would I call it from
__getattr__? I know I'm not really hiding it ;just mangling it. On the other
hand, I guess it doesn't matter. What do you think?
Mike
More information about the Tutor
mailing list