1. 构造函数:java
为何要有构造函数?函数
打一个比方:类的建立就是比如你建立了好了一种格式的房间,你租给上一个住户的后,里面会对方不少“垃圾”和不规则的物品摆放。构造函数就是下一个住户再使用的时候进行物品的初始化摆放,防止下一个用户再使用的时候会出现没有初始化物品错放的错误等。this
构造函数的格式:spa
__init__( ):.net
注意:在使用建立对象的时候会自动调用,构造函数用于初始化类实例的状态。若是不显式的建立构造函数,默认会自动添加一个构造函数。其实因为没有自己都会带上这个构造函。可是仍是要写上比较好。code
举例说明:对象
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) # hanmeimei 20 170 55 # hanmeimei 20 170 55 per4 = Person("lilei",18,180,80) print(per4.name,per4.age,per4.height,per4.weight) # lilei 18 180 80 # lilei 18 180 80
2. 析构函数:blog
为何要有析构函数?内存
以前咱们在第一篇关于内存详细解析的时候说过,在高级的语言相似于C/C++、java等不须要手动的去释放内存。在这类语言当中有自动的内存管理机制。其实析构函数就是释放类在调用后的一种内存释放做用。所以咱们释放内存经常使用的一共有四种,释放类的内存,释放实例化的内存,释放函数内存,释放变量内存。析构函数就是释放类的内存的一种方式,可是咱们有自动化的内存释放机制,这种方式通常咱们也不太写。it
格式:
__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 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 版权声明:本文为博主原创文章,转载请附上博文连接!