本节内容

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__

说明:

  1. __module__: 表示当前操作的对象在哪个模块
  2. __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)
= Foo()   #执行__init__
f(1,2,3,name=333)  # 执行call方法,也可以写成 Foo()(1,2,3,name=333)
#输出
running call (123) {'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")
= 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)
= 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)
= Foo()
f["name"= "shuaigaogao"  #自动触发__setitem__方法
f["name"]      #自动触发__getitem__方法
del f["name"]  #自动触发__delitem__方法
#输出
__setitem__: name shuaigaogao
__getitem__: name
__delitem__ name

注:这边的__delitem__没有做真正的删除,只是触发这个方法,想要真正删除,只需要在__delitem__函数中添加删除功能即可

转载于:https://www.cnblogs.com/luoahong/p/7208395.html

面向对象【day08】:类的特殊成员(一)相关推荐

  1. 【C++面向对象】类的数据成员:绑定、布局和存取

    一.数据成员的绑定(The binding of a data member) 先看一段代码: //某个头文件,从某处含入 extern float x;class Point3d { public: ...

  2. 在保护继承中基类的共有成员_C++面向对象:C++ 继承

    面向对象程序设计中最重要的一个概念是继承.继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易.这样做,也达到了重用代码功能和提高执行效率的效果. 当创建一个类时,您不需要重新 ...

  3. python面向对象课程大作业 定义一个描述学生基本情况的类,数据成员至少包括 “姓名、性别、学号、年级、所在院系、面向对象的考试日期”

    python面向对象课程大作业 按下列要求编写一个完整的程序: 定义一个描述学生基本情况的类,数据成员至少包括"姓名.性别.学号.年级.所在院系.面向对象的考试日期",成员函数至少 ...

  4. 在类内定义成员函数、在类外定义成员函数、计算长方体的体积【C++面向对象编程类的使用经典案例】

    文章目录 一.在类内定义成员函数 二.在类外定义成员函数(使用符号::) 三.计算3个长方体的体积(class成员函数) 一.在类内定义成员函数 #include <iostream> u ...

  5. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  6. 面向对象(类的概念,属性,方法,属性的声明,面向对象编程思维

    1 面向对象 1.1 你是如何认识新事物的? 从过往的事物中总结事物的特点(特征),并比对新事物,把新事物进行归类. 1.2 类(Class)的概念(A) 类是对一组具有相同特征和行为的对象的抽象描述 ...

  7. php 面向对象开发 类的学习 一

    面向对象的学习 一,如何创建一个类 class 类名 { 成员属性 成员方法 } class Myclass { public $name; public $type; function Myfun( ...

  8. Python基础教程:类的特殊成员及高级特性

    1 对象的格式化输出 (1)如果需要对一个对象(实例)进行格式化输出,可以重写类的__repr__()和__str__()方法. 两者的区别:使用交互式解释器输出对象时,结果是__repr__()方法 ...

  9. 在保护继承中基类的共有成员_C++学习大纲:继承方式的调整

    C++ 继承方式的调整 在任何继承方式中,除了基类的private成员外,都可以在派生类中分别调整其访问控制. 调整格式 [public: | protected: | private: ] :: ; ...

  10. Java抽象类、接口、类的特殊成员

    抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的. 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问 ...

最新文章

  1. 【五线谱】五线谱的常用符号 ( 花连谱号 | 高音谱号 | 低音谱号 | 休止符 | 小节线 )
  2. Linux软件安装配置Yum源
  3. 网络安全比赛理论答题(一)
  4. 套接字有哪些类型?socket有哪些类型?
  5. pandas内置绘图_使用Pandas内置功能探索数据集
  6. JDK 9:模块系统状态的重点
  7. mysql sumif条件求和_sumif与sumifs条件求和函数详解,小白到大神的必经之路
  8. ubuntu虚拟机联网
  9. 无法打开、创建WEB项目,VS2003有寄生性?
  10. 形式多样!APP引导页设计灵感
  11. 华为-公有云-云硬盘-磁盘类型及性能介绍
  12. POJ 3254 Corn Fields [DP]
  13. python接口上传图片和文件的方法
  14. 医院耗材管理系统开发_2
  15. 切莫止步于 TOGAF® 认证
  16. 使用gooflow和easyui做的一个工作流程配置图
  17. 景观平面图转鸟瞰图_嘉兴施工图设计说明及要求规范嘉兴建筑方案设计嘉兴钢结构加固设计需要什么资质嘉兴开门洞加固设计嘉兴如何看懂平面图嘉兴效果图制作视频...
  18. Python科学绘图 南丁格尔图/玫瑰图
  19. aws基础架构学习笔记
  20. html广告位代码,javascript实现一个简单的广告位

热门文章

  1. php会话的销毁和退出,销毁PHP会话
  2. java 数据结构 无向图_数据结构-无向图
  3. 2022-2028年中国新零售行业深度调研及投资前景预测报告(全卷)
  4. 【Spring】框架简介
  5. Java并发编程之CountDownLatch、CyclicBarrier和Semaphore
  6. Mobileye高级驾驶辅助系统(ADAS)
  7. 如何写新的C++ OP
  8. 如何在TVM上集成Codegen(下)
  9. DCN-cs6200 ospf v2配置
  10. C# 视频多人脸识别的实现过程