一、什么是定义类的关键字
在编程中,定义类的关键字是用来声明并定义一个类的,类是将数据和函数封装在一起形成的一种类型,通过类来实例化对象。在Python程序中,定义类的关键字是 class。class语句可以在模块级、函数级或在一个类中定义另一个类。
class MyClass: def __init__(self, name): self.name = name def myfunc(self): print("Hello, my name is " + self.name)
在上面的代码中,定义了一个名为 MyClass 的类,该类有一个构造函数 __init__,它接受一个参数 name,并将其存储在实例变量 self.name 中。还定义了一个名为 myfunc 的方法,该方法将打印出 self.name 变量的值。
二、类的成员变量
类的成员变量是存储在类中的变量,可以通过实例访问。成员变量有两种类型:实例变量和类变量。实例变量是每个实例唯一的变量,而类变量是所有实例共享的。
class MyClass: class_var = 0 def __init__(self, name): self.name = name MyClass.class_var += 1 def myfunc(self): print("Hello, my name is " + self.name + ", and there are " + str(MyClass.class_var) + " of us.")
在上面的代码中,定义了一个类变量 class_var,以及一个实例变量 name。构造函数 __init__ 将给定的名称存储在实例变量 self.name 中,并增加类变量 MyClass.class_var 的值。方法 myfunc 打印实例的名称和当前实例数量。
三、类的继承
类的继承是指一个类从另一个类获得其属性和方法的过程。被继承的类称为基类或父类,新类称为派生类或子类。子类可以覆盖父类的方法,也可以添加新的方法和属性。
class MyParentClass: def myfunc(self): print("I am the parent class.") class MyChildClass(MyParentClass): def myfunc(self): print("I am the child class.") my_child = MyChildClass() my_child.myfunc() # output: "I am the child class."
在上面的代码中,定义了一个父类 MyParentClass 和一个子类 MyChildClass。子类 MyChildClass 通过使用父类的名字来声明继承关系。子类覆盖了父类的 myfunc 方法,打印子类的文本信息。创建 MyChildClass 的实例 my_child 并调用其方法 myfunc。
四、类的多重继承
多重继承指一个类从多个基类或父类继承属性和方法。Python 支持类的多重继承。
class MyFirstParentClass: def myfunc(self): print("I am the first parent class.") class MySecondParentClass: def myfunc(self): print("I am the second parent class.") class MyChildClass(MyFirstParentClass, MySecondParentClass): def myfunc(self): print("I am the child class.") my_child = MyChildClass() my_child.myfunc() # output: "I am the child class."
在上面的代码中,定义了两个父类 MyFirstParentClass 和 MySecondParentClass,以及一个子类 MyChildClass,该子类继承了两个父类的属性和方法。当子类实例调用方法 myfunc 时,将打印子类的文本信息。
五、类的属性装饰器
Python 支持为类的属性添加装饰器,这些装饰器可用于扩展属性的功能。类的属性装饰器有四种:@property、@classmethod、@staticmethod 和 @abstractmethod。
class MyClass: def __init__(self, name): self.name = name @property def myname(self): return self.name @classmethod def myfunc(cls, arg): print("My class: " + cls.__name__ + ", My arg: " + arg) @staticmethod def mystaticfunc(): print("I am a static method.") @abstractmethod def myabstractfunc(self): pass
在上面的代码中,定义了一个类 MyClass,并使用属性装饰器为其添加四个方法:myname、myfunc、mystaticfunc 和 myabstractfunc。其中,myname 方法使用 @property 装饰器,将 self.name 属性包装成一个只读属性。myfunc 方法使用 @classmethod 装饰器,将 cls 参数传递给方法,以便在方法中可以使用类的属性和方法。mystaticfunc 方法使用 @staticmethod 装饰器,可以在不实例化类的情况下直接使用该方法。myabstractfunc 方法使用 @abstractmethod 装饰器,定义了一个抽象方法,必须在派生类中实现。
原创文章,作者:EOHWH,如若转载,请注明出处:https://www.506064.com/n/372661.html