上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法。

一、 使用__dict__定义实例变量

  1. 语法:

    对象名. dict[属性名] = 值
  2. 语法释义:

    “对象名”为要增加实例变量的对象,如果是在实例方法中,应该为”self”。

    属性名为要定义实例变量的名字,必须是字符串类型,即变量名必须用引号。

    上述语法相当于:

    对象.属性 = 值。

    这是由于Python中所有变量都存在对应名字空间的字典中,定义变量就是增加一个字典的元素。

二、 使用__dict__定义实例方法

  1. 语法:

    对象名. dict[属性名] = 函数名
  2. 语法释义:

    “对象名”为要增加实例变量的对象,如果是在实例方法中,应该为”self”,关于self,请参考《第7.5节 揭开Python类中self的面纱》

    属性名为要定义实例方法的名字,必须是字符串类型,即变量名必须用引号。

    三、 案例
  3. 案例说明

    例子中定义了一个类Car,在该类的构造方法中使用__dict__增加了一个实例变量和一个drive方法,其中drive方法与self的绑定使用了《第7.14节Python类中的实例方法解析》中介绍的MethodType。定义类后我定义一个实例,来访问通过__dict__增加的实例变量和实例方法。
  4. 源代码(交互模式)
>>> from types import MethodType #导入MethodType方法
>>> def fdrive(self,distance):self.totaldistance += distance #定义一个函数,准备用于赋值给类的实例方法属性 >>> class Car():
def __init__(self, power):
self.power = power
self.__dict__['totaldistance'] = 10 #使用__dict__定义实例变量
self.__dict__['drive'] = MethodType(fdrive,self) #将函数赋值给drive方法,并与self绑定 >>> car = Car('汽油发动机')
>>> car.drive(103)
>>> car.totaldistance
113
  1. 执行截屏



    为了简单说明,我们只介绍在实例方法中使用__dict__定义实例变量和实例方法,实际上与动态定义实例变量和方法一样,使用__dict__一样可以在类体外定义实例变量和方法。只是把实例方法中定义的方法的调用者由”self”改成”实例对象”即可。在此就不展开说了。

    本节结合案例介绍了直接使用类中的__dict__定义实例变量和实例方法,本身这种实现方式没有多大价值,只是为了说明类中属性的定义本质上就是操作__dict__的元素。

    老猿Python系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。

    欢迎大家批评指正,谢谢大家关注!

第8.12节 Python类中使用__dict__定义实例变量和方法的更多相关文章

  1. 第8.28节 Python中使用__setattr__定义实例变量和实例方法

    一. 引言 根据前面章节介绍的内容,我们知道实例变量.实例方法的定义可以通过以下方法进行: 在类体中直接定义实例变量.实例方法: 在实例方法中定义实例变量.实例方法: 在类体外调用方使用赋值语句赋值定 ...

  2. 第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析

    第7.17节  Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一 ...

  3. 第7.14节 Python类中的实例方法详析

    第7.14节 Python类中的实例方法详析 一.    实例方法的定义 在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式: 1.    类体中定义实例方法 第一种方式很简单,就是在类体 ...

  4. 第8.6节 Python类中的__new__方法深入剖析:调用父类__new__方法参数的困惑

    上节<第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执行顺序及参数关系案例详解>通过案例详细分析了两个方法的执行顺序,不知大家是否注意到了,在上述 ...

  5. (转载)php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗?

    (转载)http://s.yanghao.org/program/viewdetail.php?i=184313 php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗? class block ...

  6. 第7.10节 Python类中的实例变量定义与使用

    一.    引言 在前面章节已经引入介绍了类变量和实例变量,类体中定义的变量为类变量,默认属于类本身,实例变量是实例方法中定义的self对象的变量,对于每个实例都是独有数据,而类变量是该类所有实例共享 ...

  7. 第8.9节 Python类中内置的查看直接父类的__bases__属性

    终于介绍完了__init__方法和__new__方法,接下来轻松一下,本节介绍类中内置的__bases__属性. 一. 语法释义 Python 为所有类都提供了一个 bases 属性,通过该属性可以查 ...

  8. Python: 类中为什么要定义__init__()方法

    学习并转自:https://blog.csdn.net/geerniya/article/details/77487941 1. 不用init()方法定义类 定义一个矩形的类,目的是求周长和面积. c ...

  9. 第8.11节 Python类中记录实例变量属性的特殊变量__dict__

    一. 语法释义 调用方法:实例. __dict__属性 __dict__属性返回的是实例对象中当前已经定义的所有自定义实例变量的名和值,用字典存储,每个元素为一个"实例变量名:值" ...

随机推荐

  1. react 实现组件嵌套以及子组件与父组件之间的通信

    当子组件触发onChange事件时,实际调用的是父组件中的handelSelect函数,通俗来说就是父组件通过属性handleSelect实现与子组件之间的通信. 父组件:SignupForm 子组件 ...

  2. 一年前,我来到国企搞IT

    ​ 2020.11.01日,这一天是我加盟xxx国企的一年整,这篇分享本来是要提前写的,不过由于前段时间确实繁忙,一直没有机会提笔.今天简单和大家分享下我在国企的一些工作内容,感悟等等,希望能给那些对 ...

  3. C# 集合类(二)

    C# 集合类自己经常用到: 数组(Array).动态数组(ArrayList).列表(List).哈希表(Hashtable).字典(Dictionary),对于经常使用的这些数据结构,做一个总结,便 ...

  4. Prometheus监控告警浅析

    前言 最近有个新项目需要搞一套完整的监控告警系统,我们使用了开源监控告警系统Prometheus:其功能强大,可以很方便对其进行扩展,并且可以安装和使用简单:本文首先介绍Prometheus的整个监控 ...

  5. 卡特兰数 洛谷P1641 [SCOI2010]生成字符串

    卡特兰数 参考博客 介绍 卡特兰数为组合数学中的一种特殊数列,用于解决一类特殊问题 设\(f(n)\)为卡特兰数的第n项 其通项公式为 \[f(n)=\frac{2n\choose n}{n+1} \ ...

  6. windows端口占用和进程定位

    问题:Error was Port already in use: 40001 1. netstat -ano|findstr "40001" TCP 127.0.0.1:1404 ...

  7. WEB安全问题

    WEB安全问题我没太多经验,但是这块内容还是很重要,所以必须要了解学习一下. 简单总结了一下,分成以下5类, 1.DDOS,瘫痪式攻击,解决方法是记录异常请求的ip地址,主动拒绝或者将攻击ip添加到防 ...

  8. python像matlab类似的符号函数绘图

    matplotlib 绘图之前需要先定义数据范围,python 有一个 sympy 包,类似 matlab 里面的符号函数,可以用来进行二维和三维的图像绘制, from sympy.plotting ...

  9. 双数组字典树(Double Array Trie)

    参考文献 1.双数组字典树(DATrie)详解及实现 2.小白详解Trie树 3.论文<基于双数组Trie树算法的字典改进和实现> DAT的基本内容介绍这里就不展开说了,从Trie过来的同 ...

  10. Fiddler的一系列学习瞎记3

    Http: 不安全.可以很容易被拦截,或者其他的嗅探工具发现.怎么样做到安全?起码一下两点: 1.浏览器和we服务器之间的内容应该只有浏览器和web服务器能看到通信内容. 2.Http请求和Http的 ...