首页 > 技术文章 > Python面向对象

Tempt 2018-11-20 10:48 原文

  • 类和对象
    类的定义这里不多赘述,直接看数据属性
    数据属性分为实例属性和类属性:
        实例属性:是在构造函数__init__定义时候以self作为前缀,实力属性属于实例所有,只能通过对象名去访问
        类数据属性:在类内定义的,类属性属于类,大家都可以去访问(除私有成员除外)
    总结:
     一,类数据属性属于类本身,可以通过类名进行访问/修改
    二,类数据属性也可以被类的所有实例访问
    三,在类定义之后,可以通过类名动态添加类数据属性,新增的类属性也被类和所有实例共有
    四,实例数据属性只能通过实例访问
    五,在实例生成之后,可以动态添加实例数据属性,但是这里,这些实例数据属性只被该实例所有

 

 成员方法:
    三种:
    1.    实例方法, 第一个参数必须是self,就是上面的图片中显示的代码,就用了实例方法
    2.    类方法,定义的时候用@classmethod修饰,通过cls可以访问相关属性  用法是用类名可以点出函数
    3.    静态方法:用@staticmethod修饰,用法和上面一样,这里用类名点处理属性方法
 
    访问控制:
    我们用单下划线'_'来实现模块级别私有化,但是单下划线的变量是可以访问,(我们约定俗成不能访问),不过在from moduleName import *中是不能访问加单下划线的变量
    在类中的的私有化:我们用双下滑线来实现私有化,在类外是无法访问,
    pis:可以通过命名重整的方法来实现访问!    _Student__address 重整类名来访问

 

构造与析构:
    构造函数属于对象,每个对象都有自己的构造函数
    析构同理,我们不用去主动调用,他会自动调用,并且python由垃圾回收机制
 
    继承:
    首先我们可以用内建函数来判断一个类是不是另一个类的子类
    issubclass(sub,sup)
    前面我们也说过用isinstance(obj,class)来判断obj是不是一个类的实例对象
    
    继承中的一些注意点
    1.    在继承中基类的构造不会被自动调用,他需要在子类中亲自调用
    2.    在调用基类方法的时候,需要加上基类的类名前缀,且加上self参数变量
    3.    Python找类型方法时候有先从本类中先查找,查找不到在在父类中查找

 

我们可以在子类中写出和父类函数名字一样的函数(即重写)

推荐阅读