python类的构造函数self_Python笔记_第三篇_面向对象_2.构造函数和析构函数(含self说明)...

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",20,170,55)

print(per3.name,per3.age,per3.height,per3.weight)

# hanmeimei20 170 55# hanmeimei20 170 55per4= Person("lilei",18,180,80)

print(per4.name,per4.age,per4.height,per4.weight)

# lilei18 180 80# lilei18 180 80

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",20,170,55)

# 第二种释放

del per5 # 对象释放后就不能在访问了

# 第三种释放:在函数里定义的对象,会在函数结束时自动释放,这样可以用来减少内存空间的浪费。

def func():

perx= Person("aa",1,1,1)

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",20,160,80)

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>

>>>A.foo1(a) #这里传入实例a,相当于普通方法的self

Hello<__main__.a object at>

>>>A.foo2() #这里,由于静态方法没有参数,故可以不传东西

hello>>>A.foo3() #这里,由于是类方法,因此,它的第一个参数为类本身。

hello

>>>A #可以看到,直接输入A,与上面那种调用返回同样的信息。

---------------------作者:daijiguo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值