# #
(object attribute)
`__get__()`, `__set__()` , `__delete__()`
(`__dict__`) (get) , (set) (delete)
`a.x` , `a.__dict__['x']` , `type(a).__dict__['x']` , `type(a)` ( (metaclass) )., Python
, type object
Django ORM ,models.Model InterField ,
```python
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class User(object):
def __init__(self, name='', sex=''):
self.sex = sex
self.name = name
def __get__(self, obj, objtype):
print(' name ')
return self.name
def __set__(self, obj, val):
print(' name ')
self.name = val
class MyClass(object):
x = User('', '')
y = 5
if __name__ == '__main__':
m = MyClass()
print(m.x)
print('\n')
m.x = ''
print(m.x)
print('\n')
print(m.x)
print('\n')
print(m.y)
```
```txt
name
name
name
name
5
```
`__get__()` `__set__()`
"",""
,:
```python
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class Meter(object):
def __init__(self, value=0.0):
self.value = float(value)
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
self.value = float(value)
class Foot(object):
def __get__(self, instance, owner):
return instance.meter * 3.2808
def __set__(self, instance, value):
instance.meter = float(value) / 3.2808
class Distance(object):
meter = Meter()
foot = Foot()
if __name__ == '__main__':
d = Distance()
print(d.meter, d.foot)
d.meter = 1
print(d.meter, d.foot)
d.meter = 2
print(d.meter, d.foot)
```
```txt
0.0 0.0
1.0 3.2808
2.0 6.5616
```
, Distance , meter foot , `__get__` .
meter , int foot `__set__` .
(MeterFoot) , (Distance) Foot `instance.meter`