类的特殊成员方法

1. __doc__  表示类的描述信息

class Func(object):
'''__doc__方法是用来打印类的描述信息''' def tell(self):
pass def enroll(self):
pass print(Func.__doc__) # 输出:类的描述信息
运行结果如下:
__doc__方法是用来打印类的描述信息

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

    2.__module__和__class__

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

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

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

    4.__del__

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

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

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

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

class Func(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex def enroll(self):
print("%s in enrolling in the school" %self.name) # def __call__(self):
# print("实例化加夸好还可以执行,窝草") f = Func("alex",,"Female") f.enroll()
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__()方法,如下:

class Func(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex def enroll(self):
print("%s in enrolling in the school" %self.name) def __call__(self):
print("实例化加夸好还可以执行,窝草") f = Func("alex",,"Female") f.enroll()
f()
运行结果如下:
alex in enrolling in the school
实例化加夸好还可以执行,窝草

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

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

class Province:
country = 'China' def __init__(self, name, count):
self.name = name
self.count = count def func(self, *args, **kwargs):
print('func') # 获取类的成员,即:静态字段、方法、
print(Province.__dict__)
# 输出:{'country': 'China', '__module__': '__main__', 'func': <function func at 0x10be30f50>, '__init__': <function __init__ at 0x10be30ed8>, '__doc__': None} obj1 = Province('HeBei', )
print(obj1.__dict__)
# 获取 对象obj1 的成员
# 输出:{'count': , 'name': 'HeBei'} obj2 = Province('HeNan', )
print(obj2.__dict__)
# 获取 对象obj1 的成员
# 输出:{'count': , 'name': 'HeNan'}

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

class Foo:
def __str__(self):
return 'alex li' obj = Foo()
print(obj)
# 输出:alex li

    8.__getitem__、__setitem__、__delitem__

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

class Foo(object):
def __getitem__(self, key):
print('__getitem__', key) def __setitem__(self, key, value):
print('__setitem__', key, value) def __delitem__(self, key):
print('__delitem__', key) obj = Foo() result = obj['k1'] # 自动触发执行 __getitem__
obj['k2'] = 'alex' # 自动触发执行 __setitem__
del obj['k1']

    9. __new__ \ __metaclass__

class Foo(object):
def __init__(self, name):
self.name = name 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类的构造方法创建。

http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python

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

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

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

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

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

  3. python 面向对象静态方法、类方法、属性方法、类的特殊成员方法

    静态方法:只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性. 在类中方法定义前添加@staticmethod,该方法就与类中的其他(属性,方法)没有关系,不能通过实例化类调用方法使用 ...

  4. JavaSE| 面向对象-类的五大成员

    面向对象 面向对象只是其中一种编程思想,还有很多其他的编程思想:面向过程.面向切面.面向服务编程... 面向过程的思维方式:注重步骤.过程,面向过程强调的是功能行为: 面向对象的思维方式:关注的是“对 ...

  5. oopday01(面向对象-类&private&this)

    面向对象基本概述.封装 01_面向对象(面向对象思想概述) * A:面向过程思想概述    * 第一步    * 第二步 * B:面向对象思想概述    * 找对象(第一步,第二步) * C:举例   ...

  6. (转)Python之路,Day6 - 面向对象学习

    本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...

  7. Java面向对象--类和对象

    面向对象是相对于面向过程而言的,是软件开发方法.面向对象把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统设计,更贴近事物的自然运行模式.本篇博客介绍Java面向对象的类和对象 目录: 面 ...

  8. C++面向对象-类和对象那些你不知道的细节原理

    一.类和对象.this指针 OOP语言的四大特征是什么? 抽象 封装.隐藏 继承 多态 类体内实现的方法会自动处理为inline函数. 类对象的内存大小之和成员变量有关 类在内存上需要对齐,是为了减轻 ...

  9. Php面向对象 – 类常量

    Php面向对象 – 类常量 类常量:类中,保存执行周期内,不变的数据. 定义: constkeyword const 常量名 = 常量值 样例: class Student { public  $st ...

随机推荐

  1. Jenkins+Maven+SVN

    准备环境: CentOS7 JDK1.7.9.0_79 Maven3.3.9 Jenkins2.5.0 1.配置jdk环境变量 2.安装maven(否则在创建job时没有maven选项) unzip ...

  2. 在VC6/VC2005下使程序直接具有XP风格(XP Style):

    原文 首先将以下文本保存为XpStyle.mainfest(后经实践,文件名和后缀是什么都无所谓) <?xml version="1.0" encoding="UT ...

  3. Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)

    Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...

  4. 科学计算三维可视化---TraitsUI(Group对象组织界面)

    使用Group对象组织界面 将一组相关的Item对象组织在一起 from traitsui.api import Group from traits.api import HasTraits,Int, ...

  5. bzoj千题计划122:bzoj1034: [ZJOI2008]泡泡堂BNB

    http://www.lydsy.com/JudgeOnline/problem.php?id=1034 从小到大排序后 最大得分: 1.自己最小的>对方最小的,赢一场 2.自己最大的>对 ...

  6. 悲催的IE6 七宗罪大吐槽(带解决方法)第三部分

    五:文字溢出bug(注释bug) 1.在以下情况下将会引起文字溢出bug 一个容器包含2两个具有“float”样式的子容器. 第二个容器的宽度大于父容器的宽度,或者父容器宽度减去第二个容器宽度的值小于 ...

  7. 用Grub4dos引导,硬盘安装ArchLinux

    本来在工作机上用winXP,最近想深入Linux开发,于是决定装个Linux.家里的archLinux + awesome用得很好, 于是决定在工作机上也装一套. 不想刻盘,也不想用U盘,通过Grub ...

  8. Richard Stallman:让我们关注和尊敬自由软件教父

    1953年,Richard Stallman生于美国纽约曼哈顿区.在度过了并不快乐的童年之后,他在哈佛大学找到了自己的家.在MIT人工智能实验室工作期间,展露出了自己的计算 机天赋.对他来说,开发操作 ...

  9. linux查询进程 kill进程

    查询进程 #ps aux #查看全部进程 #ps aux|grep firewall #查询与firewall相关的进程 kill进程一 kill进程pid为711进程: #pkill -9 711 ...

  10. 训练赛第二场G题 ZOJ 2343

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2343 解题报告:首先我假设最后的正确的结果是a[1] , a[2 ...