Python面向对象之什么是类(1)
1、C#、Java :只能用面向对象编程
Ruby、Python :函数编程+ 面向对象
面向对象编程不是在所有地方都比函数式编程方便的,类是为了封装,下面是简单的使用方法
在创建类的时候要用class再加上一个类名,然后加上方法,调用类里面的方法必须先实例化一个类,然后使用事例去执行类里面的方法。
每次实例化的时候其实都是如图上一样,先在内存里面开辟一块空间,然后这个实例有一个类内存指针,告诉自己是由那个类创建的
2、在执行类的方法的时候,Python内部会将实例会作为self参数传进去,如下面代码
class Boo(): def ab(self,arg): print(arg,self) def cd(self,arg2): print(arg2) obj1=Boo() obj1.ab('1')#通过obj1调用这个方法,boj1会先去类里面寻找这个方法再执行,但是这个类需要两个参数,obj1会作为第一个self参数传进去 print(obj1)
结果如下图
面向对象有一个重要功能是封装,如下面代码
class Boo(): def ab(self): print(self.arg)#这里arg是类本身的一个属性 def cd(self): print(self.arg) obj1=Boo() obj1.arg= '1'#把方法封装进去,以后类的方法里面只要调用self.org就可以调用这个值了 obj1.ab() obj1.cd()
#执行结果就是打印了两个1
上面是一种封装方式,但是是非主流的,我们也可以在类里面进行封装操作,
class Boo(): def __init__(self,age):#这个init函数在实例类的时候会自动执行,叫构造方法,self指的是具体的实例 self.name = 'Jay'#实例的时候name和age属性会被封装进具体实例 self.age = age #age这个属性是根据我们实例化时候传进的参数决定的 def abc(self): print(self) obj1 = Boo('33')#实际是初始化 print(obj1.age,obj1.name)#打印出这两个属性
其实在解析器在内存里面销毁这个对象的时候会默认自动执行一个__del__方法,叫析构方法,这在其他语言也适用
初始化类之后,我们也可以通过反射查找类里面的属性和方法
class god: def __init__(self,name): self.name =name def shit(self): print('shit') def she(self): print('黄赌毒') obj = god('Jay') r1=hasattr(obj,'shit')#查找对象里面是否含有该方法或者属性 r2=hasattr(obj,'name') r3 = hasattr(obj,'age') print(r1,r2,r3)
执行结果是True True False