python面向对象小tips

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python面向对象小tips相关的知识,希望对你有一定的参考价值。

(一)、python鸭子类型

  python作为动态语言继承和多态与静态语言(像java)有很大的不同;比如说在java中的某个方法,如果传入的参数是Animal类型,那么传入的对象必须是Animal类型或者其子类,否则,将无法调用run()方法。对于Python来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了,这就是动态语言中的“鸭子类型”,不强调严格的继承,只需要“看起来像鸭子就行了,即使你是一只天鹅”,

所以说你的对象只要有那个方法即可,这也是python面向过程或者说面向函数在对象中的体现所在!

# coding=utf-8
class Animal(object):
    def run(self):
        print(看,有只动物在跑)

class Dog(Animal):

    def run(self):
        print(看,是只狗在跑)
    def eat(self):
        print(那狗在吃东西)

class Car(object):
    def run(self):
        print(车启动了。。。)

def gogogo(animal):
    animal.run()
    # animal.eat()

gogogo(Dog())

print("--测试鸭子类型--")
gogogo(Car())

 (二)、python中的访问权限 

1).在Python中,变量名以双下划线开头(__xxx__),并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,不要将对象的属性名弄成 __xxx__ 这种格式;
2).以 _xx开头的实例变量是可以访问的,但是这只是告诉我们,它是可以被访问的,但是要看作私有变量,不要随意访问;
3).实例的变量名如果以__xx开头,这就成了一个私有变量(private),只有内部可以访问,“外部不能直接访问”,不能直接访问__xx是因为Python解释器对外把__xx变量改成了_object__xx(这个很重要,可以帮助理解很多问题),所以,仍然可以通过_object__xx来访问__xx变量。

 

 (三)、待定ing

以上是关于python面向对象小tips的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

python面向对象(封装继承多态)+ 面向对象小栗子

Python面向对象的30个小例子

python之路之前没搞明白4面向对象(封装)

python-面向对象编程设计与开发