Skip to content

Instantly share code, notes, and snippets.

@Jordan-Cottle
Created August 22, 2021 02:23
Show Gist options
  • Save Jordan-Cottle/cb106a1820ff7b80d788425d86bdd92b to your computer and use it in GitHub Desktop.
Save Jordan-Cottle/cb106a1820ff7b80d788425d86bdd92b to your computer and use it in GitHub Desktop.
Quick demonstration of `__slots__` with inheritance. Subclasses are able to make their own independent decision on whether to use slots or not. Subclasses will use a dynamic `__dict__` instead of the static `__slots__` as usual, even if their parent class uses `__slots__`.
class Foo:
__slots__ = ["spam", "eggs"]
def __init__(self) -> None:
self.spam = "spam"
self.eggs = "eggs"
class Bar(Foo):
def __init__(self):
super().__init__()
self.bar = "bar"
self.eggs = "yum"
self.spam = "gross"
foo = Foo()
bar = Bar()
print(foo.spam, foo.eggs)
# spam eggs
print(bar.spam, bar.eggs, bar.bar)
# gross yum bar
bar.dynamic_attribute = "works"
print(bar.dynamic_attribute)
# works
foo.dynamic_attribute = "doesn't work"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment