python面向对象学习记录
类
定义类
1 | class Class_name(object): |
1.其中object指继承的哪个类,所有的类都是object的派生类,所以没有找到合适的继承类时,就填写object
2.init叫做构造函数,用来初始化类,和传递参数,这里值得一提的是,init的初始化方式:在实例化一个类的时候,class1 = Class_name(“admintony”) ,这样其实是把class1作为self这个变量也传递进来,然后再进行class1.name = name 这样的赋值。
3.在类中创建的函数叫做成员方法,所有的成员方法都有一个默认的参数self,自动把实例化的对象传递进去,调用时不需要填写该参数
实例化
1 | class1 = Class_name("admintony") |
类变量
类变量:类似于global变量,每个实例都可以调用的,且可以通过类名来调用这个变量 (存放所有类共用的属性)
1 | class Class_name(object): |
1>可以在class1中改写c_name这个值,但是不影响其他的实例
2>Class_name.c_name = “com” 这样可以影响到其他的实例
3>如果类变量是可变类型的变量(list),那么在class1中修改了此变量会影响其他实例
增加/删除成员变量
增:根据init的实质可以知道,在实例化后仍然可以通过class1.age = 19 来给class1这个实例增加新的属性
删:del class1.age #即可删除age这个成员属性
析构函数
析构函数是在实例销毁或者被释放的时候执行的函数,常用来做一些收尾工作
1 | class Class_name(object): |
实例销毁或者被释放的情况:
<1>代码执行完成,程序退出。1>
<2>del 实例名 #这里利用了python动态回收内存的方法,删除变量名,该空间就会被释放。2>
私有属性,私有方法
只能在内部使用的变量或者方法叫做私有变量(属性)、私有方法
1 | def __init__(self,name): |
此时的__name就是一个私有属性,只能在类的内部访问,如果想要查看他要写一个函数来返回他。
1 | def getname(self): |
私有方法和私有变量类似,在方法名前面加两个下划线。
面向对象的特性
封装
封装就是提供接口,但是不告诉你类中的结构和实现的方法。
继承
1 | class People(object): |
1>继承以后可以重写父类的方法。
2>继承后如果在某个函数中需要调用父类的方法:父类.方法(self) 一定记着传self进去,因为这个时候你调用的时候父类不知道self的指向。
3>重构init():super(子类名,self).init(父类要的参数) 然后再写子类处理其他的参数。
1 | class People(object): |
- 4>多继承:多个父类的构造函数的参数个数相同,继承时写的父类顺序,会影响初始化时,各个父类的init()的执行顺序。[或者多个父类只写一个构造函数]
1 | class People(object): |
多态
`