1. 构造函数

  为什么要有构造函数

  打一个比方:类的创建就是好比你创建了好了一种格式的房间,你租给上一个住户的后,里面会对方很多“垃圾”和不规则的物品摆放。构造函数就是下一个住户再使用的时候进行物品的初始化摆放,防止下一个用户再使用的时候会出现没有初始化物品错放的错误等。

  构造函数的格式:

  __init__( ):

  注意:在使用创建对象的时候会自动调用,构造函数用于初始化类实例的状态。如果不显式的创建构造函数,默认会自动添加一个构造函数。其实由于没有本身都会带上这个构造函。但是还是要写上比较好。

  举例说明:

class Person(object):
def __init__(self,name,age,height,weight):
print(name,age,height,weight)
self.name = name
self.age = age
self.height = height
self.weight = weight
def run(self):
print("run")
def eat(self,food):
print("eat " + food) per3 = Person("hanmeimei",,,)
print(per3.name,per3.age,per3.height,per3.weight)
# hanmeimei
# hanmeimei per4 = Person("lilei",,,)
print(per4.name,per4.age,per4.height,per4.weight)
# lilei
# lilei

2. 析构函数

  为什么要有析构函数

    之前我们在第一篇关于内存详细解析的时候说过,在高级的语言类似于C/C++、java等不需要手动的去释放内存。在这类语言当中有自动的内存管理机制。其实析构函数就是释放类在调用后的一种内存释放作用。因此我们释放内存常用的一共有四种,释放类的内存,释放实例化的内存,释放函数内存,释放变量内存。析构函数就是释放类的内存的一种方式,但是我们有自动化的内存释放机制,这种方式一般我们也不太写。

  格式:

  __del__( )

  举例说明:

# 第一种释放
class Person(object):
def __init__(self,name,age,height,weight):
self.name = name
self.age = age
self.height = height
self.weight = weight
def __del__(self):
print("这里是析构函数")
def run(self):
print("run")
def eat(self,food):
print("eat " + food)
def say(self):
print("Hello! My name is %s, I am %d years old" %(self.name,self.age)) per5 = Person("hanmeimei",,,)
# 第二种释放
del per5 # 对象释放后就不能在访问了 # 第三种释放:在函数里定义的对象,会在函数结束时自动释放,这样可以用来减少内存空间的浪费。
def func():
perx = Person("aa",,,) func()

3. self说明

  我们发现,在类的列表中有一个object的父类。在属性和方法的编写的时候出现了self的这个东西。这个东西就是一种“自身限制”的作用。解释如下:  

  self:表示类的实例,而非类。那个对象调用方法,那么该方法中的self代表那个对象。

  self.__class__:代表类名。

  self.表示调用自身类。表示当前实例的引用。意思是:他只能被用在下列类成员的代码块中

  self的目的:

    用于区分类的成员和本地的变量或参数。

    作为调用方法的实参。

  self类似于C# 语言中的this.的意思

  举例说明:

class Person(object):
def __init__(self,name,age,height,weight):
# print(name,age,height,weight)
self.name = name
self.age = age
self.height = height
self.weight = weight def run(self):
print("run")
def eat(self,food):
print("eat " + food)
def say(self):
print("Hello! My name is %s, I am %d years old" %(self.name,self.age))
# self不是关键字,换成其他的标识符也是可以的,但是帅的人一般都用self per = Person("Tom",,,)
per.say()

4.cls说明

  Self表示一个具体的实例本身。如果用了staticmethod(静态方法),那么饥渴五十这个self,把这个方法当成一个普通使用。

  cls表示这个类本身,常用用在返回这个类的方法或者属性的类型和信息信息。

>>> class A(object):
def foo1(self):
print "Hello",self
@staticmethod
def foo2():
print "hello"
@classmethod
def foo3(cls):
print "hello",cls >>> a = A() >>> a.foo1() #最常见的调用方式,但与下面的方式相同
Hello <__main__.A object at 0x9f6abec> >>> A.foo1(a) #这里传入实例a,相当于普通方法的self
Hello <__main__.A object at 0x9f6abec> >>> A.foo2() #这里,由于静态方法没有参数,故可以不传东西
hello >>> A.foo3() #这里,由于是类方法,因此,它的第一个参数为类本身。
hello <class '__main__.A'> >>> A #可以看到,直接输入A,与上面那种调用返回同样的信息。
<class '__main__.A'>
---------------------
作者:daijiguo
来源:CSDN
原文:https://blog.csdn.net/daijiguo/article/details/78499422
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. 优化定时器NSTimer-runloop使用
  2. 基音周期提取2-基于线性相关系数的Matlab实现
  3. css与js后边有?v=20160101
  4. KMP算法(快速模式匹配)
  5. Win2003+Powershell2.0下无权限解锁账号
  6. 【液晶模块系列基础视频】4.1.X-GUI图形界面库-画线画圆等函数简介
  7. Iaas-cloudstack概念
  8. [itint5]树中最大路径和
  9. PHP导出MySQL数据到Excel文件
  10. C语言itoa函数和atoi 函数
  11. Windows7和Archlinux双系统硬盘安装笔记
  12. wordpress建站过程3——header.php
  13. Ubuntu VMware workstation虚拟机清理缓存文件获得更大硬盘空间
  14. Do-Now—团队Scrum 冲刺博客二
  15. CSDN去广告插件
  16. Sqlite 参数化 模糊查询 解决方案
  17. spring web参数传递
  18. batchGetAnchorLevel(dubbo接口)
  19. 利用Mega2560实现USB转串口
  20. 三种迭代Java ArrayList方法及比较

热门文章

  1. windows内核安全编程书籍
  2. Egret Engine 2D - Get Started
  3. Express ~ 获取表单 get 和 post 提交方式传送参数的对比
  4. 二十、CI框架数据库操作之查看生产的sql语句
  5. 201909-2 小明种苹果(续) Java
  6. Django回顾之_03_Model属性及后端配置
  7. Linux 目录变化监听 - python代码实现
  8. 洛谷 P2196 挖地雷
  9. 流程引擎表单引擎的常见问题技术交流-关于广州xx公司对驰骋BPM提出
  10. Java线程——线程池概念