zoukankan      html  css  js  c++  java
  • python object对象

    动态语言的对象属性

    既然都是动态语言,自然python和熟知的JavaScript很像,建一个空对象用来存放所有的数据,看看js:

    var data = {};
    data.name = 'CooMark';
    data.age = 30;
    

    但是在python中这样却不行,说好的动态属性呢?

    data = object()
    data.name = 'CooMark' # AttributeError: 'object' object has no attribute 'name'
    

    但是像下面这样又是可以的,WTF?

    class Developer(object):
        pass
    
    data = Developer()
    data.name = 'CooMark'
    data.age = 30
    

    python slots

    python的__slots__设计是为了节省内存,也可以用于构造安全的类、如果一个类使用了__slots__那么它的属性就不再自由了。

    下面举例说明:

    1. 自由属性。
    class person(object):
        def __init__(self, name, age):
            self.Name = name
            self.Age = age
        if __name__ =='__main__':
            p = person('jianglex', 100)
            p.ID = 7  # 由于没有使用slots所以属性是自由的,可以自由设置,就算设置前没有声明也没事。
    
    1. __slots__设置非自由属性
    class person(object):
        __slots__=('Name','Age')
    
        def __init__(self,name,age):
            self.Name=name #注意,__init__的执行在__slots__之后;所以就算在__init__方法里也是不能执行self.ID=007的。
            self.Age=age
        if__name__=='__main__':
          p=person('jiangle',100)
          p.ID=7 #这里会报错,由于我们使用了__slots__来声明属性,所以属性再也不是自由的了。
    
  • 相关阅读:
    关于宇宙大爆炸的理论模型
    算法系列2《RSA》
    Codeforces Round #248 (Div. 1)——Nanami's Digital Board
    Cocos2d-x场景变化相关功能介绍
    NYOJ 745 蚂蚁问题(两)
    quick-cocos2d-x endToLua 退出会卡住
    编程算法
    linux基础知识1
    URAL 1553. Caves and Tunnels 树链拆分
    2014/11/13_ 随想
  • 原文地址:https://www.cnblogs.com/wancy86/p/6528789.html
Copyright © 2011-2022 走看看