Skip to content

Instantly share code, notes, and snippets.

@BitAndQuark
Created December 23, 2018 06:48
Show Gist options
  • Select an option

  • Save BitAndQuark/8c44685c6c48b4daa434964cd6583643 to your computer and use it in GitHub Desktop.

Select an option

Save BitAndQuark/8c44685c6c48b4daa434964cd6583643 to your computer and use it in GitHub Desktop.
Python descriptor
# descriptor, is like a simplification on property
# one descriptor can be used in multiple classes, instead of repeated property definitions
class Name:
def __get__(self, instance, owner):
print(instance, 'get name')
return instance._name
def __set__(self, instance, value):
print(instance, 'set name to', value)
instance._name = value
def __delete__(self, instance):
del instance._name
class Technician:
def __init__(self, name) -> None:
self._name = name
name = Name()
class Engineer:
def __init__(self, name) -> None:
self._name = name
name = Name()
t = Technician('jj')
e = Technician('dd')
print(t.name)
print(e.name)
t.name = 'jack'
e.name = 'dela'
# output: #
#>> <__main__.Technician object at 0x0000000002935F60> get name
#>> jj
#>> <__main__.Technician object at 0x0000000002934320> get name
#>> dd
#>> <__main__.Technician object at 0x0000000002935F60> set name to jack
#>> <__main__.Technician object at 0x0000000002934320> set name to dela
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment