New submission from Artem Tomilov <[email protected]>:
from abc import ABCMeta
class Meta(ABCMeta):
def __instancecheck__(cls, instance):
# monkeypatching class method
cls.__subclasscheck__ = super(Meta, cls).__subclasscheck__
return super(Meta, cls).__instancecheck__(instance)
def __subclasscheck__(cls, sub):
return cls in sub.mro()
class A(object):
__metaclass__ = Meta
class B(object): pass
# registering class 'B' as a virtual subclass of 'A'
A.register(B)
>>> issubclass(B, A)
False
>>> isinstance(B(), A) # => method __subclasscheck__ is now monkeypatched
True
>>> issubclass(B, A) # => desire to get 'True' because 'B' is a virtual subclass
False
----------
components: None
messages: 146366
nosy: Artem.Tomilov
priority: normal
severity: normal
status: open
title: Monkeypatching using metaclass
type: behavior
versions: Python 2.7
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue13264>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com