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__来声明属性,所以属性再也不是自由的了。
    
  • 相关阅读:
    【转】理解Ruby的4种闭包:blocks, Procs, lambdas 和 Methods
    折腾weibo开放平台
    netsh——常用命令及使用技巧
    The Enemies of Achievement
    java内存模型
    命名规则
    JS 控制加载页面对象
    点击图片弹出上传文件对话框
    ASP.NET判断用户是否在线
    ASP.Net处理QueryString函数汉字参数传递错误
  • 原文地址:https://www.cnblogs.com/wancy86/p/6528789.html
Copyright © 2011-2022 走看看