python:面向对象的基本知识

发布时间:2019-10-08 20:16:48编辑:auto阅读(1774)

    面向对象:

    #类是现实世界或思维世界的实体在计算机中的反映
    #它将数据以及这些数据上的操作封装在一起
    
    # 属性-特征 
        
    # 方法(函数)-行为
        # 构造函数-__init__() 初始化类的特征
        构造函数是自动被调用的,也可显式调用,但不能定义return值,只能返回None(一般不用)
        作用:初始化类的特征值,让对象之间变的不同
    

    1 类命名

    # 首字母大写;单词之间大写连接
    

    2 构造函数(特殊的实例方法)

    # 2.1 默认被调用;亦可被主动调用
    # 2.2 只能返回None,它不是用来返回值的
    # 2.3 作用:让模板创建不同的对象,初始化对象的特性
    

    3 属性

    # 类变量(用'='号赋值!!!) :Students.sum 
        #规范:通过方法修改类变量
        # self.__class__.变量 访问类变量
    # 实例变量
        # self.变量 定义实例变量
    # __dict__ 内置函数(同__all__,定义import*的范围):对象下所有变量的字典
        # dict需在实例中调用,在类中不准确。
    

    4 方法

    # 4.1 实例方法
        # self 显胜于隐 相当于this,只和实例对象有关,和类无关
            #访问实例变量,要加self
        # 访问类变量 __class__ 指定的类 Student
        # 不要操作与对象无关的变量,请用类方法
        
    # 4.2 类方法 @classmethod装饰器
        # 在函数前加上一个@classmethod 将self改成cls
        # 避免逻辑错乱,不要用对象调用类方法
        # 可以访问类变量 cls.sum(实例方法:self.__class__.变量 )
        # 调用:类.类方法() (不建议用对象调用类方法,不合逻辑)
        
    # 4.3 静态方法 @staticmethod,不推荐用此方法
        # 在函数前加上一个@staticmethod
        # 可以同时被 对象、类 调用
        # 可以访问类变量 Student.sum,和变量关联性不大的方法时用
    

    5 成员的可见性

    # 只允许内部的方法操作变量,避免直接修改数据变量
    # __ 前面加 双下划线 变量变成私有
    

    6 继承性

    # 建议一个类单独成一个文件
    # super 指代父类 Python3.x 和 2.x 的一个区别是:3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx
    # 子类调用父类 属性、方法 时,优先使用super()

    案例:

    class Student():
        sum=0
        def __init__(self,name1,age):
            self.name=name1
            self.age=age
            self.__score=0
            print(self.name)
            
            #在实例方法中不要操作与对象无关的变量,请用类方法
            #self.__class__.sum+=1
            #print((self.__class__.sum))
            #2.2 return '只能返回None'
        
        @classmethod
        def plus_sum(cls):
            cls.sum+=1
            print('我们班有:',cls.sum)
            
        @staticmethod
        def add(x,y):
            print('This is a static method')
        def do_homework(self):
            print('写作业')
            
        def marking(self,score):
            self.__score=score
            print(self.name+'同学本次成绩是'+str(self.__score))
    
    class people
    #实例化
    s1=Student('石敢当',20)
    r1=s1.marking(98)
    
    Student.plus_sum()
    s1=Student('石当2',22)
    Student.plus_sum()
    
    #2.1 很少调用构造函数,只是证明可用
    #a=s1.__init__()
    # print(a)
    # print(type(a))
    
    #print(s1.name)
    #print(s1.__dict__)
    #print(Student.__dict__)
    
    s1.do_homework()

关键字