类的特殊成员方法

1. __doc__  表示类的描述信息

  1. class Func(object):
  2. '''__doc__方法是用来打印类的描述信息'''
  3.  
  4. def tell(self):
  5. pass
  6.  
  7. def enroll(self):
  8. pass
  9.  
  10. print(Func.__doc__) # 输出:类的描述信息
    运行结果如下:
    __doc__方法是用来打印类的描述信息

__doc__是用来打印类的描述信息。就是类的注释。

    2.__module__和__class__

__module__表示当前操作的对象在那个模块

__class__ 表示当前操作的对象的类是什么

3. __init__ 构造方法,通过类创建对象时,自动触发执行。

    4.__del__

析构方法,当对象在内存中被释放时,自动触发执行。

注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的

 5. __call__ 对象后面加括号,触发执行。

注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

  1. class Func(object):
  2. def __init__(self,name,age,sex):
  3. self.name = name
  4. self.age = age
  5. self.sex = sex
  6.  
  7. def enroll(self):
  8. print("%s in enrolling in the school" %self.name)
  9.  
  10. # def __call__(self):
  11. # print("实例化加夸好还可以执行,窝草")
  12.  
  13. f = Func("alex",18,"Female")
  14.  
  15. f.enroll()
  16. f()
    运行结果如下:
    alex in enrolling in the school
    Traceback (most recent call last):
      File "/home/zhuzhu/第七天/class的方法.py", line 17, in <module>
        f()
    TypeError: 'Func' object is not callable

上面代码中,f是一个实例,我们知道,实例化的变量是不能够加上括号执行的。提示错误:TypeError: 'Func' object is not callable,说不能够callable,现在我们加上__call__()方法,如下:

  1. class Func(object):
  2. def __init__(self,name,age,sex):
  3. self.name = name
  4. self.age = age
  5. self.sex = sex
  6.  
  7. def enroll(self):
  8. print("%s in enrolling in the school" %self.name)
  9.  
  10. def __call__(self):
  11. print("实例化加夸好还可以执行,窝草")
  12.  
  13. f = Func("alex",18,"Female")
  14.  
  15. f.enroll()
  16. f()
    运行结果如下:
    alex in enrolling in the school
    实例化加夸好还可以执行,窝草

从上面代码可以看出,本来实例加上括号不能执行的,现在可以执行了,就因为__call__()方法,可以看出,__call__()方法,对实例就行了构造,让其能够执行__call__()的方法。

    6. __dict__ 查看类或对象中的所有成员

  1. class Province:
  2. country = 'China'
  3.  
  4. def __init__(self, name, count):
  5. self.name = name
  6. self.count = count
  7.  
  8. def func(self, *args, **kwargs):
  9. print('func')
  10.  
  11. # 获取类的成员,即:静态字段、方法、
  12. print(Province.__dict__)
  13. # 输出:{'country': 'China', '__module__': '__main__', 'func': <function func at 0x10be30f50>, '__init__': <function __init__ at 0x10be30ed8>, '__doc__': None}
  14.  
  15. obj1 = Province('HeBei', 10000)
  16. print(obj1.__dict__)
  17. # 获取 对象obj1 的成员
  18. # 输出:{'count': 10000, 'name': 'HeBei'}
  19.  
  20. obj2 = Province('HeNan', 3888)
  21. print(obj2.__dict__)
  22. # 获取 对象obj1 的成员
  23. # 输出:{'count': 3888, 'name': 'HeNan'}

    7.__str__ 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

  1. class Foo:
  2. def __str__(self):
  3. return 'alex li'
  4.  
  5. obj = Foo()
  6. print(obj)
  7. # 输出:alex li

    8.__getitem__、__setitem__、__delitem__

用于索引操作,如字典。以上分别表示获取、设置、删除数据

  1. class Foo(object):
  2. def __getitem__(self, key):
  3. print('__getitem__', key)
  4.  
  5. def __setitem__(self, key, value):
  6. print('__setitem__', key, value)
  7.  
  8. def __delitem__(self, key):
  9. print('__delitem__', key)
  10.  
  11. obj = Foo()
  12.  
  13. result = obj['k1'] # 自动触发执行 __getitem__
  14. obj['k2'] = 'alex' # 自动触发执行 __setitem__
  15. del obj['k1']

    9. __new__ \ __metaclass__

  1. class Foo(object):
  2. def __init__(self, name):
  3. self.name = name
  4.  
  5. f = Foo("alex")

上述代码中,f 是通过 Foo 类实例化的对象,其实,不仅 f 是一个对象,Foo类本身也是一个对象,因为在Python中一切事物都是对象

如果按照一切事物都是对象的理论:obj对象是通过执行Foo类的构造方法创建,那么Foo类对象应该也是通过执行某个类的 构造方法 创建。

<class '__main__.Foo'>    # 输出:<class '__main__.Foo'>     表示,obj 对象由Foo类创建
  <class 'type'>      # 输出:<type 'type'>              表示,Foo类对象由 type 类创建

所以,f对象是Foo类的一个实例Foo类对象是 type 类的一个实例,即:Foo类对象 是通过type类的构造方法创建。

【Python】面向对象--类的特殊成员方法的更多相关文章

  1. Python面向对象类的特殊成员方法

    类的特殊成员方法:1.__doc__ : 打印类下面的注释 2.__module__和__class__:from lib.aa import C输出类被导出的模块名lib.aa,输出类的模块名和类名 ...

  2. 『无为则无心』Python面向对象 — 52、私有成员方法(类中行为的封装)

    Python对于类的成员没有严格的访问控制限制,这与其他面向对象的编程语言是有所区别的. 关于私有方法其实和私有属性差不多,有如下要点: 1.通常我们约定,两个下划线开头的方法是私有方法. 2.类内部 ...

  3. day6面向对象--类的特殊成员方法

    类的特殊成员方法 1. __doc__ 表示类的描述信息 class Func(object): '''__doc__方法是用来打印类的描述信息''' def tell(self): pass def ...

  4. python面向对象(类和对象及三大特性)

    类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态   面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  5. python 面向对象(类的特殊成员)

    python 面向对象: (思维导图 ↑↑↑↑) 类的特殊成员 python的类成员存在着一些具有特殊含义的成员 1.__init__: 类名() 自动执行 __init__ class Foo(ob ...

  6. python面向对象(类的成员及类方法)

    类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法   类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...

  7. python 面向对象(类)

    面向对象,即是将具备某种共性的事物抽象成一个类(模板),然后再根据类来创建实例对象进行具体的使用. 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写, ...

  8. python面向对象——类

    from:http://www.runoob.com/python3/python3-class.html Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在P ...

  9. Python面向对象 --- 类的设计和常见的内置方法

    面向对象:一种基于面向过程的新的编程思想.也就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种 ...

随机推荐

  1. 20154327 Exp5 MSF基础应用

    基础问题回答 用自己的话解释什么是exploit,payload,encode. exploit漏洞利用,一般出现漏洞后,根据一些大佬们给出的POC尝试去进行漏洞利用. payload攻击负载,是我们 ...

  2. Codecraft-18 and Codeforces Round #458:D,Bash and a Tough Math Puzzle

    题目传送门 题目大意:Bash喜欢对数列进行操作.第一种操作是询问l~r区间内的gcd值是否几乎为x,几乎为表示能否至多修改一个数达到.第二种操作是将ai修改为x.总共Q个询问,N个数. Soluti ...

  3. 成都Uber优步司机奖励政策(1月8日)

    1月8日 奖励政策 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblog ...

  4. Linux 下获取本机IP

    http://blog.csdn.net/K346K346/article/details/48231933 int main () { /* struct ifaddrs *ifap, *ifa; ...

  5. MySQL高级-性能分析Explain

    1.使用Explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的.分析你的查询语句或是表结构的性能瓶颈 . 2.执行方法:Explain + SQL语句 解释 ...

  6. android学习十一 高级调试分析功能

    1.debug 功能列表 2.ddms功能( 内存检查,线程检查,视图层次分析) 3.跟踪代码 TraceView 4.命令行工具 adb 5.策略检查StrictMode

  7. linux下的java开发环境

    一.jdk的安装 1.复制jdk至安装目录,我们指定的安装目录是:/usr/local/java .可是系统安装后在/usr/local下并没有java目录,这需要我们去创建一个java文件夹,如图

  8. 银行系统ps:不太完善,蟹蟹评论

    # 主程序运行 import time from guanli import GuanLi from atm import ATM from user import User def main(): ...

  9. Java 消息对列

    ActiveMQ入门实例   1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5. ...

  10. python中的迭代器与生成器

    迭代器 迭代器的引入 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,那么有几种方式? 1.通过索引取值 ,如了l[0],l[1] 2.通过for循环取值 fo ...