当前位置 博文首页 > RemainderTime:另一个世界系列:Python高级之面向对象(四)

    RemainderTime:另一个世界系列:Python高级之面向对象(四)

    作者:[db:作者] 时间:2021-07-12 21:48

    最近的忙碌,进阶比较缓慢
    前面的三篇主要讲Python的基础部分,第四篇为Python高级部分面向对象

    记录点

    面向对象-封装(2019-8-22)

    • 类 - class
    • 对象
    class Student():     #定义一个类
       name = ''    #定义变量
       age = 0
    
       def print_file(self):    #定义一个方法
           print("name:"+self.name)
           print('age:'+str(self.age))    #输出
    
    student =Student()    #实例化一个对象
    student.print_file()    #调用方法
    

    注:self 在每个方法括号中都必须写上,这个相当于java中的 this 关键字。
    但 self按严格来说它不是python的关键字,self可以是任何符合的字符串,只是python官方推荐使用 self 而已

    类与对象:类像一个模板一样,可以产生各种各样的对象

    • 构造函数
     def __init__(self,name):    #构造函数
            self.name=name
            self.source= 0
            print(name) #调用实例变量 方式1
            print(self.name) #调用实例变量 方式2
            print(self.__class__.name)#调用类变量 方式1
    

    部分特性和java差不多

    类变量和实例变量(2019-8-26)

    实例变量:通过实例对象调用的变量和在构造函数中定义过的 如上述构造函数类代码

    print(name) #调用实例变量 方式1
    print(self.name) #调用实例变量 方式2
    

    类变量:通过类名直接调用的,或者在实例函数中使用 self.class.变量名调用的 如上述代码

    print(self.__class__.name)  #调用类变量 方式1
    Student.name  #调用类变量 方式2
    

    方法

    实例方法
    就是一般的定义方法,关联实例对象

    def show(self):
    	pass
    

    注:关键字 pass 相当于一个占位 在还没想好逻辑的时候可以使用它 反正代码报错

    类方法
    方法上使用装饰器 @classmethod 以及必传参数 cls

    #类方法
    @classmethod  
    def plus_sum(cls):
        cls.sum +=1  
        print(cls.sum)    #调用类变量
    

    注: cls 字符串 和self的作用差不多,只是只能用在类方法上

    在类方法中调用类变量的方式与实例方法不同

    self.__calss__.name    #实例方法调用类变量
    cls.name   #类方法调用类变量
    

    静态方法
    方法上使用装饰器 @staticmethod,和类方法的区别就是不用传cls, 一般不推荐使用

      #静态方法
     @staticmethod  
     def plus_sum():
         pass
    

    要点:一般保证数据的安全不能直接给数据赋值,要在方法中进行完成,方法中可以进行判断,体现了python的面向对象的封装性

    私有

    私有方法
    在方法前面加 ‘__’ 双下划线

    def  __sum(self):
    	pass
    

    私有方法外部强行调用会报错
    私有变量
    在变量前面加 ‘__’ 双下划线

    __name = '小米'
    

    无法进行私有变量调用,

    student = Student() #实例化
    print(student.__name)  
    

    因为python的动态机制,这里其实是重新定义了一个变量 __name
    可以使用 _dict _ 来查看当前对象的所以变量信息

    print(student.__dict__)   #输出详细
    

    可以从输出的内容中可以看到,原来的变量变成了 类名加变量名 如:_Student__name

    面向对象-继承(2019-8-28)

    python的继承特性和java的继承特性差不多,相信有java继承的会更好的理解

    父类

    #父类  2019-8-28
    class Human():
    
        sum = 0
        def __init__(self,name,age):
            self.name=name
            self.age=age
    
        def show(self):
            print("父类的方法")
    

    子类

    from m4 import Human   #导入父类   m4为文件名     Human为类名
    class Student(Human):  #继承父类
        
        def __init__(self,school,name,age):
            self.school=school
           
            #调用父类的构造函数  需要加入self   方式一
            Human.__init__(self,name,age)
            #方式二  使用super关键字
            super(Student,self).__init__(name,age)
        
        def out(self):
            #调用父类方法
            super(Student,self).show()
            print("加油")
    
    ss =  Student('社会','44',5)
    print(ss.name)
    print(ss.age)
    ss.out()
    

    调用父类的两种方式
    方式一

     #调用父类的构造函数  需要加入self   方式一
     Human.__init__(self,name,age)
    

    方式二
    使用关键字 super

    #方式二  使用super关键字
    super(Student,self).__init__(name,age)
    

    面向对象-多态(- - -)


    完整代码获取: 点击此处.


    github地址:RemainderTime.
    个人博客地址:梦麟繁花(ps:还在完善中…)
    简书:RemainderTime
    网易云音乐ID: remaindertime


    扑向未来!
    加油

    cs
    下一篇:没有了