美文网首页简友广场
7,Python面向对象2

7,Python面向对象2

作者: 软件软软 | 来源:发表于2019-08-20 09:54 被阅读0次

    保护对象的属性

    如果有一个对象,当需要对其进行修改属性时,有2种方法

            对象名.属性名 = 数据 ---->直接修改

            对象名.方法名() ---->间接修改

    为了更好的保存属性安全,即不能随意修改,一般的处理方式为

    将属性定义为私有属性

    添加一个可以调用的方法,供调用

    Python中没有像C++中public和private这些关键字来区别公有属性和私有属性

    它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。

    一:__del__()方法

    创建对象后,python解释器默认调用__init__()方法;

    当删除一个对象时,python解释器也会默认调用一个方法,这个方法为__del__()方法。

    当有1个变量保存了对象的引用时,此对象的引用计数就会加1,

    当使用del删除变量指向的对象时,如果对象的引用计数不会1,比如3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,如果再调用1次del,此时会真的把对象进行删除。

     单继承

    继承:有两类,A类和B类,如果说A类继承至B类,那么A类称为子类,B类称为父类,A类就拥有B类的所有属性

    object是所有类的父类,或者是基类或超类

    继承的作用:

    1.减少了代码的冗余

    2.提高了代码的健壮性(改动父类)

    3.提高了代码的安全性

    4.是多态的前提

    缺点:耦合与内聚是描述类与类之间的关系的。耦合性越低,内聚性越高,代码越优良

    在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物。

    # 定义一个父类:

    class  Cat(object):

            def__init__(self, name, color="白色"):

                    self.name = name 

                    self.color = color

            def  run(self):

                print("%s--在跑"%self.name)

    # 定义一个子类,继承Cat类如下:

    class  Bosi(Cat):

            def  setNewName(self, newName) :

                    self.name = newName

            def  eat(self):

                    print("%s--在吃"%self.name)

    bs = Bosi("印度猫")

    print('bs的名字为:%s'%bs.name)

    print('bs的颜色为:%s'%bs.color)

    bs.eat()

    bs.setNewName('波斯')

    bs.run()

    单继承

    说明:

    虽然子类没有定义__init__方法,但是父类有,所以在子类继承父类的时候这个方法就被继承了,所以只要创建Bosi的对象,就默认执行了那个继承过来的__init__方法

    总结

    子类在继承的时候,在定义类时,小括号()中为父类的名字

    父类的属性、方法,会被继承给子类。

    多继承

    所谓多继承,即子类有多个父类,并且具有它们的特征。

    # 定义一个父类

    class  A:

            def  printA(self):

                print('----A----')

    # 定义一个父类

    classB:

            def  printB(self):

                    print('----B----')

    # 定义一个子类,继承自A、B

    class  C(A,B):

            def  printC(self):

                    print('----C----')

    obj_C = C()

    obj_C.printA()

    obj_C.printB()

    运行结果:

    ----A----

    ----B----

    Python中是可以多继承的,

    父类中的方法、属性,子类会继承。

    注意:

    如果在上面的多继承例子中,如果父类A和父类B中,有一个同名的方法,那么通过子类去调用的时候,调用哪个?

    classbase(object):

            def  test(self):

                    print('----base test----')

    class  A(base):

            def  test(self):

                    print('----A test----')

    # 定义一个父类

    class  B(base):

            def  test(self):

                    print('----B test----')

    # 定义一个子类,继承自A、B

    class  C(A,B):

            pass

    obj_C = C()

    obj_C.test()

    print(C.__mro__)#可以查看C类的对象搜索方法时的先后顺序

    运行结果:

    ----A test----

    这是为什么呢?

    相关文章

      网友评论

        本文标题:7,Python面向对象2

        本文链接:https://www.haomeiwen.com/subject/ryjysctx.html