Skip to content
This repository has been archived by the owner on Sep 14, 2018. It is now read-only.

isinstance(object, classinfo) raise a type error when classinfo is a subclass of abstract class #575

Closed
ironpythonbot opened this issue Dec 9, 2014 · 0 comments

Comments

@ironpythonbot
Copy link

Run below code:

meta classes for creating abstract classes and instances

class AbstractClass(object):
def init(self, bases):
self.bases = bases
def getbases(self):
return self.bases
** bases ** = property(getbases)
def call(self):
return AbstractInstance(self)
class AbstractInstance(object):
def init(self, klass):
self.klass = klass
def getclass(self):
return self.klass
** class ** = property(getclass)

abstract classes

AbstractSuper = AbstractClass(bases=())
AbstractChild = AbstractClass(bases=(AbstractSuper,))

normal classes

class Super:
pass
class Child(Super):
pass
print isinstance(Super(), AbstractChild)
print isinstance(AbstractChild(), AbstractChild)
print isinstance(AbstractSuper(), AbstractChild)
print isinstance(Child(), AbstractChild)
print isinstance(Child, AbstractChild)

IronPython 2.0A5 result is:
Traceback (most recent call last):
File test_isinstance.py, line 39, in Initialize
File , line 0, in stub##16
TypeError: expected type, got Microsoft.Scripting.Types.DynamicType

Expected result is:
False
True
False
False
False

meta classes for creating abstract classes and instances

class AbstractClass(object):
def init(self, bases):
self.bases = bases
def getbases(self):
return self.bases
** bases ** = property(getbases)
def call(self):
return AbstractInstance(self)
class AbstractInstance(object):
def init(self, klass):
self.klass = klass
def getclass(self):
return self.klass
** class ** = property(getclass)

abstract classes

AbstractSuper = AbstractClass(bases=())
AbstractChild = AbstractClass(bases=(AbstractSuper,))

normal classes

class Super:
pass
class Child(Super):
pass

print isinstance(Super(), AbstractChild)
print isinstance(AbstractChild(), AbstractChild)
print isinstance(AbstractSuper(), AbstractChild)
print isinstance(Child(), AbstractChild)
print isinstance(Child, AbstractChild)

Work Item Details

Original CodePlex Issue: Issue 23811
Status: Active
Reason Closed: Unassigned
Assigned to: Unassigned
Reported on: Jul 27, 2009 at 11:55 PM
Reported by: dfugate
Updated on: Feb 22, 2013 at 2:12 AM
Updated by: jdhardy
Custom value: Reported internally at Microsoft.
Test: test_instance.py
CreatedDate: 11/2/2007
NewInternalID: 409614
OldInternalID: 318209
AreaPath: IronPython\Python25

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants