首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python - 面向对象编程 - __dict__

为什么要讲 __dict__ 在 Python 类的内部,无论是类属性、实例属性、实例方法、类方法、静态方法,都是以字典的形式进行存储的,其中属性名作为键,而值作为该键对应的值 为了方便查看类包含了哪些属性...' objects>, '__doc__': None} 如果用实例对象调用 __dict__ 会输出所有实例属性组成的字典 用类对象调用 __dict__ 会输出所有实例方法、类属性、类方法组成的字典...__dict__) # 通过实例对象调用 a = A() b = B() print(a.__dict__) print(b....__init__ at 0x1022553a0>, 'test': , '__dict__': <attribute '__dict__'...,同样子类也有自己的 __dict__,它不会包含父类的 __dict__ 通过 __dict__ 修改值 还是上面的代码 a = A() print(a.

19910

数据和自省《私有属性、__dict__

_Test__attr3) #可以继承 运行结果 三、__dict__ __dict__是个魔法属性。这个属性就是我们创建一个对象的时候,它会自动给这个对象添加一个__dict__属性。...因为__dict__属性的存在,如果我们定义一个类,因为__dict__的存在,它会造成内存的消耗。 1.查看已经继承Test类的A类的属性 通过__dict__来看类所用的属性。...__dict__) 运行结果 子类继承父类的时候没有__dict__和__weakref__这2个东西。...如果定义一个类只创建一个对象,这个对象会给你绑定一个__dict__属性。那么__dict__里面存了一些数据。 如果这个类创建了特别多的对象,每个对象都会有一个__dict__属性。...这个时候,__dict__属性会占用特别多的内存空间。

34410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python中的__dict__和dir()的区别

    __dict__与dir()的区别:dir()是一个函数,返回的是list;__dict__是一个字典,键为属性名,值为属性值;dir()用来寻找一个对象的所有属性,包括__dict__中的属性,__dict...__dict__ #{'age': 2, 'name': 'xy'} 实例中的__dict__属性 print A....'''从上述代码可知,实例的__dict__仅存储与该实例相关的实例属性,正是因为实例的__dict__属性,每个实例实例属性才会互不影响。...类的__dict__存储所有实例共享的变量和函数(类属性,方法等),类的__dict__并不包含其父类的属性。...一个实例的__dict__属性仅仅是那个实例实例属性的集合,并不包含该实例的所有有效属性。所以如果想获取一个对象所有有效属性,应使用dir()。

    4.8K40

    python魔法函数__dict__和__getattr__的妙用

    python魔法函数__dict__和__getattr__的妙用。__dict____dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值。...既然__dict__是个字典那么我们就可以用字典的属性了。我们通过使用dir()属性来看看__dict__都有哪些属性。...': dicts={"name":"lisa","age":23,"sex":"women","hobby":"hardstyle"} a=A(dicts)看完后感觉怎么样啊,其实__dict...拓展:部分内建函数不包含__dict__属性比如list,如果要查看list的属性怎么办呢,这时候用dir(list),dir方法也是查看对象的属性,包括内建对象的属性,但是它的输出形式列表,而__dict...print(req.text)url_gen = UrlGenerator('https://www')url_gen.baidu.com.get充分利用__getattr__会在没有查找到相应实例属性时被调用的特点

    2.1K30

    Some question about

    __dict__['__dict__'] 是指 class 的实例拥有的 __dict__ 属性,它是一个描述器,调用它会返回实例的 __dict__ 属性。...简单来说,因为一个实例的 __dict__ 属性不能(why?)保存在实例的 __dict__ 中,所以需要通过 class 中的一个 descriptor 来调用。...__dict__['__dict__'] 是一个 GetsetDescriptor,所以实例的属性是有能力增加的) 对于 class A 的实例 a ,访问 a.__dict__ 时的背后是通过 A....__dict__['__dict__'] 实现的(vars(type)['__dict__']) 完整解释: class 和实例访问属性都是通过属性操作符 (class or metaclass's _...对于一般的实例对象,__dict__ 会返回一个保存包含所有实例属性的独立的 dict 实例对象,对 __getattribute__ 的调用首先会访问这个 dict,并获取相应的实例属性 (这个调用会在通过描述器协议访问

    67330

    Python 黑魔法之内存优化

    ,每个实例也有一个 __dict__ 属性,它里面就是当前的实例属性: >>> a = Sample() >>> a....__dict__ {'age': 23} 上面的操作可以看出,当实例刚刚创建的时候,__dict__ 是空的,只有创建了实例属性以后,它才包含其内容。...实例的 __dict__ 和类的 __dict__ 是有所区别的,即实例属性和类属性是不同的。...从理论上来说,我们可以根据一个类创建无数的实例,新建一个实例以后,又创建了一个新的 __dict__,这将是一个很可怕的事情,虽然每个 __dict__ 所占的内存空间很小,当然这件事事实上是不会出现的...__slots__) 4531629384 你看,实例化以后,实例的 __slots__ 和类的 __slots__ 完全一样,这跟前面的 __dict__ 大不一样了。

    36210

    python 类

    通常把具有相同特征(数据元素)与行为(功能)的事物描述定义为一个类,类是一个抽象的概念,把类实例化既可以得到一个对象。...二、数据属性 属性有两种,类属性,实例属性(对象的属性),通常把所有对象共同拥有的属性定义为类属性,如:每个人都只有两只眼等,实例属性则时根据不同的对象赋值不一样的值,如:姓名等 下面来看一个简单的代码实现...注:实例属性一般放在init方法里边初始化,不会在执行的过程中增加、删除对象的属性 三、方法 1、普通的方法 上边没有@符号修饰,供外部实例调用,普通的方法也叫实例方法,但虽然叫实例方法但却与类相关,存储在类的属性中...__init__ at 0x000001468207B6A8>, '__dict__': , '__weakref__...__init__ at 0x000001468207B6A8>, '__dict__': , '__weakref__

    70630

    定制类和黑魔法

    __dict__ # 实例的__dict__属性 {} >>> f.name = 'lisi' >>> f....因为操作实例属性会自动调用__setattr__方法,底层操作实例的__dict__属性字典,而定义了__slots__后,__dict__不存在了。   ...2.引子:使用点来访问属性本质上就是在访问类或者对象的__dict__属性字典(类的字典是共享的,而每个实例的是独立的)中的内容。     ...如果有一个属性很少的类,但是有很多实例,每个实例又不需要定义各自的实例属性,此时为了节省内存,可以使用__slots__取代__dict__。     ...当定义__slots__后,__slots__就会为实例使用一种更加紧凑的内部表示。实例通过一个很小的固定大小的数组来构建,而不是为每个实例定义一个__dict__属性字典。

    46410

    python自学成才之路 类属性和实例属性,__slots__方法

    目录 类属性和实例属性 __dict__方法 __slots__方法 类属性和实例属性 python里面属性分两种,类属性和实例属性。如何去区分一个属性是类属性还是实例属性?...,实例可以访问类属性 实例无法修改类属性 类属性可以动态添加,且实例能访问到这些动态添加的属性 实例属性之前互相不影响 实例属性和类属性同名时,实例访问的是实例属性 根据以上五点,再来捋捋案例上的输出:...man2实例和类,所以man2和类Man都抛出了属性缺失异常 __dict__方法 类属性和实例属性都可以通过__dict__来获取 print(Man....__str__ at 0x000001AC9D29DAF0>, '__dict__': , '__weakref__': <...有了__slots__方法后,实例属性只能通过__slots__来获取属性,类属依然可以通过__dict__方法来获取。 print(per.__slots__) print(Person.

    82710
    领券