zoukankan      html  css  js  c++  java
  • Python(七) 高级部分:面向对象

    一、类的定义

    # 面向对象
    #有意义的面向对象代码
    # 类 =  面向对象
    # 类、对象
    #实例化
    # 类最基本的作用:封装
    class Student():
        name = ''
        age = 0
    
        def print_file(self):
            print('name'+self.name)
            print('name'+str(self.age))
    
    student=Student() #实例化
    student.print_file()

    二、浅谈函数与方法的区别

    方法 和 函数的区别
    方法 :设计层面 
    函数:程序运行、过去式的一种称谓

    三、类与对象。

    类是描述 一类的 行为和特征

    对象是具体的描述对象

    类像一个模板一样  可以生成许多不同的对象

    四、构造函数

    #类、对象
    
    class Student():
        name = ''
        age = 0
    
        #行为 与 特征
        def __init__(self):
            #构造函数
            print('student')
    
        def print_file(self):
            print('name'+self.name)
            print('name'+str(self.age))
    
    s=Student()
    s.__init__()
    
    student  #实例化时候 调用了构造函数
    student   #单独调用了了构造函数

    构造函数不能返回除了None 以外的值

    五、区别模块变量与类中的变量

    六、类变量与实例变量

    类变量:和类相关的变量

    实例变量:和对象相关联的变量

    class Student():
        name = ''  #类变量
        age = 0
    
        #行为 与 特征
        #类变量、实例变量
        def __init__(self,name,age):
            #构造函数
            #初始化对象的属性
            self.name=name  #定义实例变量
            self.age=age
            # print('student')
    
        def print_file(self):
            print('name'+self.name)
            print('name'+str(self.age))
    
    s=Student('大明',20)
    print(s.name)  #打印实例变量 需要在类里面保存实例变量
      print(Student.name) #打印类变量
     
    
    大明
    ''

    七、类与对象的变量查找顺序

    实例名称. __dict__  类中实例变量

    八、self与实例方法

    self 代表的实例 而不是类

    九、在实例方法中访问实例变量与类变量

    class Student():
    
        name = 'qiyue'  #类变量
        age = 0
    
        #行为 与 特征
        #类变量、实例变量
        def __init__(self,name,age):
            #构造函数
            #初始化对象的属性
            self.name=name  #定义实例变量
            self.age=age
            print(self.name)
            print(self.__class__.name) #在实例方法中访问类变量
            print(Student.name)
            # print('student')
    
        def print_file(self):
            print('name'+self.name)
            print('name'+str(self.age))
    
    s=Student('大明',20)
    
    大明  #实例变量
    qiyue #访问类变量
    qiyue # 类变量

    十、类方法

    class Student():
    
        sum = 0
        name = 'qiyue'  #类变量
        age = 0
    
        #行为 与 特征
        #类变量、实例变量
        def __init__(self,name,age):
            #构造函数
            #初始化对象的属性
            self.name=name  #定义实例变量
            self.age=age
            self.__class__.sum +=1
            print('当前学生总数为:'+ str(self.__class__.sum))
            # print('student')
    
        #实例方法
        def do_homework(self):
            print('do_homework')
    
        @classmethod  #类方法
        def plus_sum(cls):
            cls.sum +=1
            print(cls.sum)
            
    
    s=Student('大明',20)
    Student.plus_sum()
    
    
    结果:
    当前学生总数为:1
    2

    十一、静态方法

    和类和对象没有关系  建议不要经常用

        @staticmethod #静态方法
        def add(x,y):
            print('This is 静态方法')

    十二、成员可见性:公开和私有

     通过方法来改变类中变量的值

    public  private python中没有这些关键字

    在变量和方法前面加上双下划线 name __name

    python 允许 实例化点来添加新的变量

    通过 _类名__私有变量

    十三、没有什么是不能访问

    十四、继承.

    class Human():
        sum = 0
        def __init__(self,name,age):
            self.name = name  
            self.age = str(age)
            
        def get_name(self):
            print(self.name)
    
    
    class Student(Human):
        # sum = 0
        def __init__(self,school,name,age):
            self.school = school  
            Human.__init__(self,name,age)
            # self.__score = 0
            # self.__class__.sum +=1
       
        def do_homework(self):
            print('do_homework')
    
    s = Student('学校','拾光',18)
    print(s.sum)
    print(s.name)
    print(s.age)
    print(s.get_name())
    
    结果:
    0
    拾光
    18
    拾光
    None

    十五、子类方法调用父类方法:super关键字

    class Human():
        sum = 0
        def __init__(self,name,age):
            self.name = name  
            self.age = str(age)
            
        def get_name(self):
            print(self.name)
    
    
    class Student(Human):
        # sum = 0
        def __init__(self,school,name,age):
            self.school = school  
            # Human.__init__(self,name,age)
            super(Student,self).__init__(name,age)
            # self.__score = 0
            # self.__class__.sum +=1
       
        def do_homework(self):
            print('do_homework')
    
    s = Student('学校','拾光',18)
    print(s.sum)
    print(s.name)
    print(s.age)
    print(s.get_name())
    
    
    结果:
    0
    拾光
    18
    拾光
    None

     

  • 相关阅读:
    Android APP 内部捐赠实现(支付宝&微信)
    RecyclerView 与 Scrollview 搭配使用的两个坑
    Android 应用内直接跳转酷市场
    Zxing 的集成 ---- Maven 对应 Gradle 的写法
    Android Gradle manifestPlaceholders 占位符详解
    Nopcommerce架构浅谈之架构层次
    Nopcommerce架构浅谈之文件结构
    策略模式
    Class path contains multiple SLF4J bindings.
    常量池
  • 原文地址:https://www.cnblogs.com/zhangtaotqy/p/9495538.html
Copyright © 2011-2022 走看看