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的主要内容,如果未能解决你的问题,请参考以下文章