Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python 3: class "template" (function that returns a parameterized class)

Tags:

I am trying to create a function that is passed a parameter x and returns a new class C. C should be a subclass of a fixed base class A, with only one addition: a certain class attribute is added and is set to equal x.

In other words:

class C(A):   C.p = x # x is the parameter passed to the factory function 

Is this easy to do? Are there any issues I should be aware of?

like image 444
max Avatar asked Feb 01 '11 02:02

max


People also ask

Can a function return a class in Python?

Everything in Python is an object. So, your functions can return numeric values ( int , float , and complex values), collections and sequences of objects ( list , tuple , dictionary , or set objects), user-defined objects, classes, functions, and even modules or packages.

How do you use a parameterized function in Python?

The terms parameter and argument can be used for the same thing: information that are passed into a function. From a function's perspective: A parameter is the variable listed inside the parentheses in the function definition. An argument is the value that is sent to the function when it is called.


1 Answers

First off, note that the term "class factory" is somewhat obsolete in Python. It's used in languages like C++, for a function that returns a dynamically-typed instance of a class. It has a name because it stands out in C++; it's not rare, but it's uncommon enough that it's useful to give the pattern a name. In Python, however, this is done constantly--it's such a basic operation that nobody bothers giving it a special name anymore.

Also, note that a class factory returns instances of a class--not a class itself. (Again, that's because it's from languages like C++, which have no concept of returning a class--only objects.) However, you said you want to return "a new class", not a new instance of a class.

It's trivial to create a local class and return it:

def make_class(x):     class C(A):         p = x     return C 
like image 139
Glenn Maynard Avatar answered Oct 07 '22 20:10

Glenn Maynard