zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    .NETframework的EF框架学习报错之datetime 数据类型
    String...的用法
    存储过程从入门到熟练(c#篇)
    售前如何做好产品演示
    华为演讲培训售前人员重点学习
    report services 报表开发和部署,集成到解决方案中 全解析
    在Asp.net用C#建立动态Excel(外文翻译)
    NET(C#)连接各类数据库集锦
    在SourceForge.net上如何使用TortoiseCVS
    用C#实现在线升级
  • 原文地址:https://www.cnblogs.com/xiaobeibei26/p/6433115.html
Copyright © 2011-2022 走看看