__new__ , FileClass.__new__ TextFileClass, TextFileClass __new__ ?
, , cls __new__, __new__:
def __new__(cls, filename):
if cls is FileClass:
return cls._factory(filename)
return super(FileClass, cls).__new__(cls, filename)
FileClass('foo.txt'), Python __init__ , __new__, FileClass, TextFileClass.__new__('foo.txt') TextFileClass('foo.txt'):
@classmethod
def _factory(cls, filename):
if filename.endswith('.txt'):
return TextFileClass.__new__(filename)
elif filename.endswith('.rtf'):
return RTFFileClass.__new__(filename)
...
, , , . factory factory .