Determine an object is a subclass of another

A

abcd

How can tell if an object is a subclass of something else?

Imagine...

class Thing:
pass

class Animal:
pass

class Dog:
pass

d = Dog()

I want to find out that 'd' is a Dog, Animal and Thing. Such as...

d is a Dog
d is a Animal
d is a Thing

Thanks
 
N

Neil Cerutti

How can tell if an object is a subclass of something else?

Imagine...

class Thing:
pass

class Animal:
pass

class Dog:
pass

d = Dog()

I want to find out that 'd' is a Dog, Animal and Thing. Such
as...

d is a Dog
d is a Animal
d is a Thing

isinstance(d, Dog)
isinstance(d, Animal)
isinstance(d, Thing)

Note that in your example d is not an instance of anything but
Dog. If you want a hierarchy, you must say so. Python doesn't
even try to make educated guesses.

class Thing:
pass

class Animal(Thing):
pass

class Dog(Animal):
pass
 
M

Matimus

First you need to subclass the classes so that Dog actually is a
subclass of Animal which is a subclass of thing...

class Thing:
pass

class Animal(Thing):
pass

class Dog(Animal):
pass

class Weapon(Thing):
pass

class Gun(Weapon):
pass

Then you can use 'isinstance'
False
 
A

abcd

yea i meant to have animal extend thing and dog extend animal....my
mistake.

anyways, is there a way to check without having an instance of the
class?

such as,

isinstance(Dog, (Animal, Thing)) ??

thanks
 
B

Bruno Desthuilliers

abcd a écrit :
yea i meant to have animal extend thing and dog extend animal....my
mistake.

anyways, is there a way to check without having an instance of the
class?

such as,

isinstance(Dog, (Animal, Thing)) ??
issubclass(Dog, Animal)

Note that such tests should only be used in a very few specific cases -
certainly not to try&implement some kind of static typing... In Python,
inheritance is mostly about implementation.
 
F

Felipe Almeida Lessa

anyways, is there a way to check without having an instance of the
class?

In [1]: class A:
...: pass
...:

In [2]: class B(A):
...: pass
...:

In [3]: issubclass(B, A)
Out[3]: True

In [4]: isinstance(B(), B)
Out[4]: True

In [5]: isinstance(B(), A)
Out[5]: True
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top