Skip to content

Instantly share code, notes, and snippets.

@profhase
Created April 28, 2017 16:21
Show Gist options
  • Save profhase/9d29cf0fa6cdb73e13ecf98af36bba98 to your computer and use it in GitHub Desktop.
Save profhase/9d29cf0fa6cdb73e13ecf98af36bba98 to your computer and use it in GitHub Desktop.
python meta subclass
class MyMeta(type):
def __new__(mcs, name, bases, clsdict):
clsdict['fields'] = {k: v
for k, v in clsdict.items()
if not k.startswith("_")}
return super(MyMeta, mcs).__new__(mcs, name, bases, clsdict)
class MyBaseClass(metaclass=MyMeta):
fields = {}
class SubClass(MyBaseClass):
param1 = 1 # meets <my_condition>
class SubSubClass(MyBaseClass):
pass
if __name__ == "__main__":
print("SubClass.fields: (expect {'param1': 1})"
print(SubClass.fields)
print("SubSubClass.fields: (expect {'param1': 1})"
print(SubSubClass.fields)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment