python学习笔记——陆

面向对象的特点 和 自己的感悟

 

 

1._init_是构造函数,给实例变量(静态变量赋值,属性)赋值

2.self 代表是把实例传进去,谁调用就把谁传进去

3.构造函数 中的实例变量,存在实例的内存空间里

4.类中的方法,类的变量。存在类的内存空间里

5.类的变量,对所有实例(对象)都是有用的,但同名的时候首先以实例变量为准,在内存中只创建一次,节省开销

6.实例变量可以 添加(对象.添加的属性=值),修改(对象.属性名=值),删除 (del 对象.属性)

 

7.在对象里修改 类变量,只会对当前的对象有效果。其他对象中的类变量不变。原因是 类变量是属于类的,属于所有对象的。在当前对象之所以改变,相当于给 实例 新增了一个 和类变量同名的属性。所以虽然同名,但读取的却不是 类变量了。

8.如果 类变量是列表 或者是 元组 字典 集合 等数据结构,在不同的对象里增加元素 或者其他操作,都会使 列表改变。因为他 既不存在类里,也不存在实例里。其他函数,对这种数据结构效果也是一样的。

 

9.析构函数  用于收尾的 操作 会在内存被回收时调用,默认也就是程序结束时。也可以主动删除这个 del对象,那么他将会在,这个对象所有的操作完成之后执行。

def __del__( self ):

pass

私有属性。方法。在前面加上两个_。只能在类内部进行访问,外部不可直接读取。这样就避免了,有人直接通过类,或者对象。获得或修改数据。数据变得更加安全。

私有属性无法访问的根本原因 在于它的名称发生了变化

变成了_类名__变量名

继承

重构父类方法

 

子类新添加一个属性

另一种方式调用父类 super

关于实例变量的两种查找策略

 

例子:A分别被 B C继承,D继承 B C

A

B(A) C(A)

D(B,C)

广度优先 顺序 D>B>C>A

深度优先 顺序 D>B>A>C

 

 

例子

#父类1
class people(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def eta(self):
        print("%s在吃苦瓜"%self.name)
#父类2
class Work(object):
    def papa(self):
        print("%s在敲代码"%self.name)

#继承两个父类
class houzi(people,Work):
    #添加一个新属性city
    def __init__(self,name,age,city):
        people.__init__(self,name,age)
        self.city=city
    def chengshi(self):
        print("%s在%s生活"%(self.name,self.city))

    def eta(self):
        '''重构父类方法'''
        print("%s该拔智齿了"%self.name)
        people.eta(self)
#创建一个实例
h1=houzi("大锤","23","北京")
h1.eta()
h1.papa()
h1.chengshi()

输出

多态

同一接口,多种实现

 

 

原文地址:https://www.cnblogs.com/HL-blog/p/7487801.html