Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Python decorator to prevent base class methods from being called directly.
Python Shell
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
debian
virtualmethod
.gitignore
LICENSE
README.md
README.txt
makedoc.sh
setup.py
test_virtualmethod.py

README.md

virtualmethod

Decorator to prevent base class methods from being called directly.

Usage

from virtualmethod import virtualmethod

class Base(object):
    @virtualmethod
    def my_virtual_method(self):
        print "This is a virtual method. Call me from a subclass!"

class A(Base):
    pass

class B(Base):
    def my_virtual_method(self):
        print "I went ahead and implemented my own version."

base = Base()
a = A()
b = B()

a.my_virtual_method()
-> This is a virtual method. Call me from a subclass!

b.my_virtual_method()
-> I went ahead and implemented my own version.

base.my_virtual_method()
-> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "virtualmethod/core.py", line 11, in __call__
    raise TypeError("Virtual method %s must be called from a subclass." % self.__name__)
TypeError: Virtual method my_virtual_method must be called from a subclass.

Note(s)

@virtualmethod works with @classmethod and @staticmethod, but must be declared first, i.e.:

@virtualmethod
@classmethod
def my_virtual_class_method(cls):
    ...

Credit

Thanks to Patrick Hensley for his input, and to Denis Ryzhkov for his method_decorator module.

Something went wrong with that request. Please try again.