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

posted @ 2017-02-23 13:46  蜗牛仔  阅读(484)  评论(0编辑  收藏  举报