动态设计语言 - python

python在语言设计上比较灵活,属于动态语言。

之前不知道这动态语言的意思,感觉很新奇,就看了下python的文档。

  • python 3.8 数据结构 文档

该文9万字,论述了python的乾坤,balabala 很多。

其中 对象可以添加或删除 对象属性和方法 的操作就是 动态语言 的表现了。

这样 python 相对来说对类型的操作就比较方便了。

  • Python3.7.5中__get____getattribute____getattr__拦截顺序

这篇博客中介绍了 通过 属性名 来获取 属性的 方法。

实例引用:

class Account(object):
    def __get__(self, instance, owner):
        print('作为别人小弟(类属性)被访问时,无条件经过我')
        return self

    def __getattribute__(self, item):
        print('访问属性时,无条件经过我')
        return object.__getattribute__(self, item)

    name = 'xiaomi'

    def __getattr__(self, item):
        print('我只负责捡漏')
        if item == 'product':
            return 'cellphone'


class User:
    name = 'Lucy'
    account = Account()


if __name__ == '__main__':
    u = User()
    p = u.account.product
    print(p)

## Output:
## 作为别人小弟(类属性)被访问时,无条件经过我(u.account触发)
## 访问属性时,无条件经过我(u.account.product触发)
## 我只负责捡漏(u.account.product触发)
## cellphone

这个实例比较形象,平时我们在访问不存在的实例的时候,就会被抛错,并且不友好的退出。

我们可以使用 __getattr__ 来做容错处理。

另外 我们还可以通过 __setattr__ 来添加或者赋值对应属性:

u.__setattr__('bb', 'ccc')

使用字典的方式来,查看所有属性及其值。

print(u.__dict__)

解锁了这个 python 技能,以后使用 python对象就更加灵活了!

你可能感兴趣的:(python)