[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/Lovepython015/Python/master/Article/PythonBasis/python10/4.md [Back]  [Original]

#  #

 (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` 



Web Proxy Viewer  |  New URL  |  Original Page