Hi
My cryptic subject is perhaps not sufficient - I'll try to make it a little better:
Assume you'd like to write something like:
import someClass x = someClass.open("someFile")
Here '.open' should read in the data and initialize the instance - with or without calling __init__. How is this to implement? Up to now I rather wrote something like x = someClass(somePrepFunction("someFile")) where the return value of somePrepFunction was used to initialize x or called the conventional 'open' within __init__. But is there no direct approach like in my pseudo-code?
You can make your code work as written by making open() a module-level function in someClass.py. Call the function fromFile() to avoid redefining open. Assuming the class has a constructor that takes a string argument:
## someClass.py def fromFile(f): data = open(f).read() return someClass(data)
class someClass: def __init__(self, data ): # init from data
Another way to do it, if this is the only way you create someClass instances, is to put the file read right in __init__():
class someClass:
def __init__(self, f):
data = open(f).read()
# init from data
Finally, you can implement fromFile() as a classmethod of someClass:
class someClass: def __init__(self, data ): # init from data
@classmethod@ # requires Python 2.4 def fromFile(cls, f): data = open(f).read() return cls(data)
Clients would do this: from someClass import someClass x = someClass.fromFile("someFile")
See this thread on comp.lang.python for more discussion of a similar requirement: http://tinyurl.com/497vg
Kent
My problem is that if I simply define open as a method of someClass (with def open(self,file_name): #somecode
pass
) all I get is:
TypeError: unbound method open() must be called with someClass instance as first argument (got str instance instead)
Which is perfectly understandable. But what is a possible workaround? (Instead of 'open' I could, of course, better use some other keyword which is no Python keyword.)
Several possibilities: - you can make a function to do what you want:
Any hints?
Thanks a lot in advance. Christian _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor