一个对象是Python中类的实例。一个课程就像是蓝图。对象具有成员变量和成员函数,这些变量被称为Python中的属性和方法。 OOP的主要目的是封装在这些数据上的数据和功能。
class ClassNameCamelCase(AnotherClass):
# class def
OOP中有两个主要关系,它们是组成和继承。组成是一个对象包含另一个对象的地方,继承是一个类在另一类上构建的地方。
构造函数,初始化器和最终确定器
一类具有内置的初始化器__init__()
方法来定义实例属性的初始值,并且它不应返回。
可以使用__new__()
来定义python中的构造函数。构造函数分配对象的内存,是创建实例之前唯一调用的函数。对于构造函数,类作为参数传递,而不是像其他类函数一样。在大多数情况下,构造函数未定义。
当实例在示波器的末端并且其寿命完成时,最终器__del__()
被调用。最终制度运行时,运行垃圾收集器。实例的后处理取决于python实现和实例属性,可能始终在最终器内部可用。
属性-Python
Python中没有私人或公共标签来控制实例属性的访问。普通属性没有前面的下划线,它可以使用实例名称和点运算符访问。
公众不应访问的属性之前是像_random_name
这样的下划线。即使可以使用DOT操作员可以访问它们,也可以说不应该访问它们。
使用属性或成员函数的名称操纵可以防止点运算符使用它。仍然可以使用被obj_instance._ClassName___mangledname
等下划线包围的类名称访问。
类属性是所有实例可用的属性。它存在于班级而不是每个实例。通常在类定义中的所有成员函数之前定义它。
方法 - python
实例方法是可以访问实例属性和类属性的方法。这些是在实例属性上起作用的正常函数。
类方法是仅在类属性上起作用的方法,并在功能顶部使用@classmethod
Decorator声明。这可以从类和实例中调用。
静态方法是无法访问实例和类属性的方法。有一种静态方法添加任何功能或业务逻辑,例如类实例使用的算法。
属性方法是在Python中提供整洁的获取器和固定器的方法。可以使用以下代码来定义属性成员的属性方法。
property(fget=None, fset=None, fdel=None, doc=None)
fget参数用于返回属性值的函数,fset用于分配值的函数,FDEL是为删除实例时运行的函数,并且DOC用于DOCSTRING。也可以使用以下装饰器设置属性方法。
random_name = property()
@random_name.getter
def randon_fn(self):
@random_name.setter
def randon_fn(self):
@random_name.deleter
def randon_fn(self):
特殊方法或dunder(双重下划线)方法添加特殊功能,例如当对象转换为字符串时使用__str__()
。 python中有许多不同的dunder方法。
遗产
继承是一个概念,它允许创建与另一类共享常见代码的类。在继承的类中,某些属性和方法被覆盖并添加其他属性和方法。
class InheritedClass(ParentClass):
#class definition
类也可以从多个类中继承,但是,只要函数发生冲突或属性在父类中,就必须对功能进行分辨率。默认情况下,Python使用C3方法分辨率顺序在类具有多个继承或多级继承时解析属性和方法查找冲突。如果类具有本地属性或方法,则首先出现。在其他情况下,按照继承图遵循该顺序。
mixin是由不同的无关类继承的类,需要共同的功能。
抽象类和虚拟子类
抽象类是只有没有任何定义的方法的类。任何继承抽象类的类都需要在抽象基类中实现所有方法。它有助于为所有继承类提供一个结构以符合结构。
虚拟子类是实现由抽象基类定义的界面的类,而无需显式继承它。它主要用于将界面与类层次结构分解,并使其更容易扩展。使用将类作为抽象类寄存器方法的虚拟子类注册。
RandAbstractClass.register(VirtualSubClass)