面向对象【day08】:类的特殊成员(一)
本节内容
1、__doc__
2、__module__和__class__
3、__init__
4、__del__
5 、__call__
6 、__dict__
7 、__str__
8 、__getitem__、__setitem__、__delitem__
前面我们讲了类的方法,有普通方法,就是我们自己定义的方法,还有静态方法,类方法,属性方法,其实类还有另外一种方法,叫做类的特殊成员方法
1 __doc__
说明:表示类的描述信息
1
2
3
4
5
6
7
8
9
10
11
|
class Dog( object ): """此类是形容Dog这个类""" #类的描述信息 def __init__( self ,name): self .name = name print (Dog.__doc__) #打印类的描述信息 #输出 此类是形容Dog这个类 |
2 __module__和__class__
说明:
- __module__: 表示当前操作的对象在哪个模块
- __class__:表示当前操作的对象的类是什么
aa.py的代码:
1
2
3
4
|
class C( object ): def __init__( self ): self .name = "shuaigaogao" |
index.py的代码:
1
2
3
4
5
6
7
8
9
10
|
from lib.aa import C obj = C() print (obj.__module__) #表示当前操作的对象在哪个模块 print (obj.__class__) #表示当前操作的对象的类是什么 #输出 lib.aa < class 'lib.aa.C' > |
3 __init__
说明:构造方法,通过类创建对象时,自动触发执行
4 __del__
说明:析构方法,当对象在内存中被释放时,自动触发执行
1
2
|
注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行, 所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的 |
5 __call__
说明: 对象后面加括号,触发执行
1
2
3
4
5
6
7
8
9
10
11
12
|
class Foo( object ): def __init__( self ): self .name = "shuaigaogao" def __call__( self , * args, * * kwargs): #重写call方法 print ( "running call" ,args,kwargs) f = Foo() #执行__init__ f( 1 , 2 , 3 ,name = 333 ) # 执行call方法,也可以写成 Foo()(1,2,3,name=333) #输出 running call ( 1 , 2 , 3 ) { 'name' : 333 } |
注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
6 __dict__
说明: 查看类或对象中的所有成员
①类.__dict__
效果:打印类中所有的属性,不包括实例属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Province( object ): country = 'China' def __init__( self , name, count): self .name = name self .count = count def func( self , * args, * * kwargs): print ( "func" ) print (Province.__dict__) #类.__dict__ #输出 { '__doc__' : None , '__weakref__' : <attribute '__weakref__' of 'Province' objects>, '__init__' : <function Province.__init__ at 0x00000247F3CAD488 >, 'country' : 'China' , '__dict__' : <attribute '__dict__' of 'Province' objects>, 'func' : <function Province.func at 0x00000247F3CAD510 >, '__module__' : '__main__' } #打印类中所有的属性,不包括实例属性 |
②实例名.__dict__
效果:打印该实例的所有属性,不包括类属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Province( object ): country = 'China' def __init__( self , name, count): self .name = name self .count = count def func( self , * args, * * kwargs): print ( "func" ) p = Province( "jiangsu" , 20000 ) #实例化 print (p.__dict__) #实例名.__dict__ #输出 { 'count' : 20000 , 'name' : 'jiangsu' } #打印该实例的所有属性,不包括类属性 |
7 __str__
说明:如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Province( object ): country = 'China' def __init__( self , name): self .name = name def __str__( self ): return "<obj:{0}>" . format ( self .name) p = Province( "jiangsu" ) print (p) #打印这个对象 #输出 <obj:jiangsu> #给对象重新起了一个名字 |
注:这个以后会在django框架里面会用到,这边就不多说了
8 __getitem__、__setitem__、__delitem__
说明:用于索引操作,如字典。以上分别表示获取、设置、删除数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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) f = Foo() f[ "name" ] = "shuaigaogao" #自动触发__setitem__方法 f[ "name" ] #自动触发__getitem__方法 del f[ "name" ] #自动触发__delitem__方法 #输出 __setitem__: name shuaigaogao __getitem__: name __delitem__ name |
注:这边的__delitem__没有做真正的删除,只是触发这个方法,想要真正删除,只需要在__delitem__函数中添加删除功能即可
面向对象【day08】:类的特殊成员(一)的更多相关文章
- 面向对象、类与对象、成员与局部变量、封装、private、构造函数、this、static、extends、super、final、abstract、interface、多态、内部类、异常【5】
若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing ...
- JavaSE| 面向对象-类的五大成员
面向对象 面向对象只是其中一种编程思想,还有很多其他的编程思想:面向过程.面向切面.面向服务编程... 面向过程的思维方式:注重步骤.过程,面向过程强调的是功能行为: 面向对象的思维方式:关注的是“对 ...
- Java:【面向对象:类的定义,静态变量,成员变量,构造函数,封装与私有,this】
本文内容: 什么是面对对象 类的定义与对象实例化 成员变量 成员变量的有效范围 成员变量的赋值 静态变量.方法与实例变量.方法 构造函数 封装与私有 this关键字 注:函数和方法是一样东西.[由于我 ...
- python 面向对象(类的特殊成员)
python 面向对象: (思维导图 ↑↑↑↑) 类的特殊成员 python的类成员存在着一些具有特殊含义的成员 1.__init__: 类名() 自动执行 __init__ class Foo(ob ...
- Python学习:17.Python面向对象(四、属性(特性),成员修饰符,类的特殊成员)
一.属性(特性) 普通方法去执行的时候,后面需要加括号,特性方法执行的时候和静态字段一样不需要不需要加括号. 特性方法不和字段同名. 特性方法不能传参数. 在我们定义数据库字段类的时候,往往需要对其中 ...
- 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象
------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...
- C++类的成员函数(在类外定义成员函数、inline成员函数)
类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...
- java面向对象之 类和对象
OOP:Object Oriented Programming(面向对象编程) 面向对象: 1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在 ...
- C#基础篇--面向对象(类与对象)
1.类是什么? 类就相当于模板,就是把同一类的事物的共同特征进行的抽象. 类的创建和说明: 类是先根据一些具体的对象(实体的东西)来抽象出来的共同的特性,然后用代码来表示. 在类中,用数据表示事物的 ...
- Python之面向对象与类
本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 子类属性查找顺序 一.面向对象的概念 1. "面向对象(OOP)"是什么? ...
随机推荐
- 结对项目 https://github.com/quchengyu/jiedui/tree/quchengyu-patch-1
所选项目名称:文本替换 结对人:傅艺伟 github地址 : https://github.com/quchengyu/jiedui/tree/quchengyu-patch-1 用一个新字 ...
- BugPhobia进阶篇章:功能规格说明书
0x01 :特别鸣谢 首先特别鸣谢<构建之法>中并没有给出固定化格式的功能规格说明书的样例,因此在此次的说明书中将尽可能用生动形象的例子展示软件交互阐释 因此受到它本身的启发,此次团队功能 ...
- shell脚本--输入与输出
输出带有转义字符的内容 单独一个echo表示一个换行 使用echo输出时,每一条命令之后,都默认加一个换行:要想取消默认的换行,需要加 -n 参数. #!/bin/bash #文件名:test.sh ...
- PAT 1028 人口普查
https://pintia.cn/problem-sets/994805260223102976/problems/994805293282607104 某城镇进行人口普查,得到了全体居民的生日.现 ...
- C++拷贝构造函数的调用时机
一.拷贝构造函数调用的时机 当以拷贝的方式初始化对象时会调用拷贝构造函数,这里需要注意两个关键点,分别是以拷贝的方式和初始化对象 1. 初始化对象 初始化对象是指,为对象分配内存后第一次向内存中填 ...
- [工作相关] GS产品使用LInux下Oracle数据库以及ASM存储时的数据文件路径写法.
1. 自从公司的GS5版本就已经支持Linux下的oracle数据库通过安装工具自动安装注册了, 只不过路径需要使用linux的命名规则, 如图: /home/oracle/ 注意 最后是有一个 斜线 ...
- Java之Array(数组)说明
代码说明: package array; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** ...
- CentOS常用包安装
安装rz和sz命令: yum install lrzsz 安装unzip:yum install unzip
- AWS、Azure和Google的云容器注册表有什么区别?
亚马逊云计算服务(AWS).谷歌云服务和微软Azure,这三大公共云平台都提供Docker容器注册表.虽然他们的产品看起来很相似,但开发人员在做出选择之前,应该先了解价格和功能方面的差异. 公共云供应 ...
- P2707 Facer帮父亲
题目背景 Facer可是一个孝顺的孩纸呦 题目描述 Facer的父亲是一名经理,现在总是垂头丧气的. Facer问父亲,怎么啦?父亲说,公司出了点问题啊. 公司管理着N个风景点,每个风景点都有不少人来 ...