Order matters
Just found out order matters when using multiple inheritance on python classes. I guess I should expect that, I even remember reading this on the docs, but I thought "Hey, lets share a tip on coderwall, maybe that way I wont forget it later and got bitten in the ass by weird bugs".
So, a little example (from actual code I am working in)
class Service(object):
def all(self):
return self.__model__.query.all()
class FilterInactiveMixin(object):
def all(self):
return self.__model__.query.filter_by(active=True)
class UsersServiceThatWorks(FilterInactiveMixin, Service):
pass
class UsersServiceThatDoesnt(Service, FilterInactiveMixin):
pass
So, basically, when calling the all
method on a UserServiceThatWorks
instance, the method from FilterInactiveMixin
will be called. If you invert the order, it never gets called, and you will probably get weird behaviour.
Written by tonnydourado
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Python
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#