How to inherit classmethod constructors?
Daniel Andersson
daniel.4ndersson at gmail.com
Sat Feb 18 13:29:23 EST 2017
I have a class "A" below, that have a very simple
__init__ method, which only wants a "needle".
class A:
def __init__(self, needle):
self.needle = needle
@classmethod
def from_haystack(cls, haystack):
# ...
# Many lines of code (omitted here)
# that process haystack to obtain a needle
# ...
# ...
# The obtained needle is then used to
# return an instance
return cls(needle)
The class also has a classmethod: "from_haystack"
that is used as an alternative to __init__ for
initalizing an instance.
My problem is that:
1. I'm not allowed to refactor A.
2. I need a class B which must inherit A.
3. B must use a haystack to initialize
itself.
4. Therefore, I want to reuse "from_haystack" from A
in some way so I don't have to repeat the code.
My naive solution was this:
class B(A):
def __init__(self, haystack, spam, eggs):
super().from_haystack(haystack) # Won't work
self.spam = spam
self.eggs = eggs
The use of super() here will call "from_haystack" with
cls = B, which won't work, since the return line will be
"return B(needle)" and B can't handle that.
What is idiomatic solution to this problem?
Thanks,
More information about the Python-list
mailing list