Skip to content

Instantly share code, notes, and snippets.

@maddrum
Last active December 6, 2021 18:30
Show Gist options
  • Save maddrum/6cc55f62ec7848f93fce07bd866f5900 to your computer and use it in GitHub Desktop.
Save maddrum/6cc55f62ec7848f93fce07bd866f5900 to your computer and use it in GitHub Desktop.
import random
class MetaSample(type):
def __new__(cls, name, bases, dct):
print(f'BEHOLD, You will get an awesome new class soon!')
x = super().__new__(cls, name, bases, dct)
x.some_var = 100
x.random_var = random.randint(0, 100)
x.called_times = 0
return x
def __init__(self, *args, **kwargs):
print(f'initing class')
super().__init__(*args, **kwargs)
def __call__(self, *args, **kwargs):
self.called_times += 1
print(f'class is called {self.called_times} times in total')
return super().__call__(*args, **kwargs)
class NewClass(metaclass=MetaSample):
pass
class ClassWOMeta:
pass
class NewClass2(NewClass):
pass
class NewClass3(NewClass2):
pass
a = NewClass()
b = NewClass2()
c = NewClass3
d = NewClass()
e = ClassWOMeta()
print('-----------------')
c()
print('defined vars')
print(c.some_var)
print('called times')
print(a.called_times)
print(d.called_times)
try:
print(e.called_times)
except AttributeError:
print('Attribute was never there')
print('random vars')
print(a.random_var)
print(b.random_var)
print(c.random_var)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment