Last active
December 6, 2021 18:30
-
-
Save maddrum/6cc55f62ec7848f93fce07bd866f5900 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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