instance + classmethod question
Laszlo Zsolt Nagy
gandalf at designaproduct.biz
Sat Dec 10 22:27:49 EST 2005
Hello,
Is it possible to tell, which instance was used to call the classmethod
that is currently running?
Background: I have a class called DatabaseConnection and it has a
classmethod called process_create_tables. This method should create some
database tables defined by a database definition object. The
DatabaseConnection has many descendants, for example
PostgreSQLConnection. Descendants know how to create tables in a given
RDBMS type. I also use subclasses of the 'SQLProcessor' class, that
processes SQL commands in different ways (print to stdout, write to
file, execute directly in the database etc.) I would like to use the
process_create_tables classmethod as is, because sometimes I only need
to save a SQL script. However, I also want to use the same classmethod
to create tables directly into an existing database. That database is
presented as a DatabaseConnection instance. In that case, I only want to
create the tables that do not exists yet. Examples:
processor = SQLProcessors.StdOutProcessor() # Print to stdout
PostgreSQLConnection.process_create_tables(processor,dbdef) # This
sould create all tables, using the processor
processor = SQLProcessors.DirectProcessor(conn) # Execute directly
conn.process_create_tables(processor,dbdef) # This should create
non-existing tables only, using the processor
Is this possible? Maybe there is a better way to achieve this, I'm not
sure. I was thinking about this construct:
@classsmethod
def process_create_tables(cls,processor,dbdef,conn=None)
and then calling it as
conn.process_create_tables(processor,dbdef,conn)
but this looks very ugly to me. It would be much easier if I could tell
which instance (if any) was used to call the classmethod.
Thanks,
Les
More information about the Python-list
mailing list