python面向对象编程

1.类和实例

类是抽象的模板,而实例是根据类创建出来的具体对象

class Student(object):

       def __init__(self,name,score):
             self.name = name
             self.score =score

       def print_score(self):
             print('%s : %s' % (self.name,self.score))

bart = Student('Bart Simpson',99)
bart.print_score()

2.类的内部的访问限制

变量前加上两个下划线表示对外隐藏该字段,如果需要访问,需要编写相关的get和set方法

以双下划线开头和结尾的变量为特殊变量,可以直接访问。

以一个下划线开头的变量可以访问,但不推荐这样。(python没有机制阻止,一切靠自觉)

3.多态和继承

多态:当需要传入父类的多个子类时,只需要在定义时将父类传入,在实际调用时,子类就会调用实际的方法

开闭原则:对扩展开放,对修改封闭

python相对于java来说是动态语言,父类传参数不是必须的,但需要确保内部有方法可以调用

4.获取对象信息

type(str)来判断对象类型    isinstance(a,b)用来判断class的类型(a是否为b)   

type可以被isinstance来替代 (总是优先使用isinstance类型)

5.实例属性和类属性

实例属性属于各个实例所有,互不干扰;

类属性属于类所有,所有实例共享一个属性;

不要对实例属性和类属性使用相同的名字。

6.使用@property

使用property装饰器目的是限制类中属性的取值或是否可读,即对参数进行检查

7.多继承模式

不同于java中的单继承,多实现的方式,pthon中使用的为多继承方式。以最顶层父类为主,其他类用Mixin修饰。

class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):

8.定制类

__str__() /__repr__():返回字符串打印。区别:repr用来程序调试的

__iter__()/__next__():用于可迭代对象进行循环

__getitem__():取可迭代对象中的元素

__getattr__():动态修改属性的取值

__call__():对实例进行调用    可以把对象看作函数,把函数看作对象

9.枚举类

python提供Enum('')来对多个元素进行枚举

10.动态创建类

python是动态语言,函数和类的定义是在运行时创建的

可以通过type()方法进行创建,还可以通过元类方式创建

原文地址:https://www.cnblogs.com/bkyf/p/10113090.html