Created
December 23, 2018 06:48
-
-
Save BitAndQuark/8c44685c6c48b4daa434964cd6583643 to your computer and use it in GitHub Desktop.
Python descriptor
This file contains hidden or 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
| # 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