How to delete a class in python

Viewed 826

If you cannot restart a python process, how can you delete or update a class? For example like below:

The code is:

# coding:utf8


class A(object):

    value = 1


class B(A):

    value = 1


subclasses = A.__subclasses__()
print(subclasses)
for subclass in subclasses:
    print('{}:{}'.format(subclass, subclass.value))
print('')


class B(A):

    value = 2


subclasses = A.__subclasses__()
print(subclasses)
for subclass in subclasses:
    print('{}:{}'.format(subclass, subclass.value))
print('')

The output is:

[<class '__main__.B'>]
<class '__main__.B'>:1

[<class '__main__.B'>, <class '__main__.B'>]
<class '__main__.B'>:1
<class '__main__.B'>:2

How can I delete the first B class, let the output change to:

[<class '__main__.B'>]
<class '__main__.B'>:1

[<class '__main__.B'>]
<class '__main__.B'>:2
1 Answers

You can use del and gc to delete the subclass and then garbage collect:

class A(object):

    def __init__(self):
        a = 1

class B(A):

    def __init__(self):
        b = 1


subclasses = A.__subclasses__()
print(subclasses)


class B(A):

    def __init__(self):
        b = 2

del B
import gc
gc.collect()

subclasses = A.__subclasses__()
print(subclasses)

Output:

[<class '__main__.B'>]
[<class '__main__.B'>]
Related