python类用法(三)

简介: python类用法(三)

python类用法(三)

、类的多态性

多态性是面向对象编程的三大特性之一,它指的是不同的对象对同一消息做出不同的响应。在Python中,由于它是动态类型语言,多态性自然地被支持。

python复制代码

 

class Shape:

 

def area(self):

 

pass 

 

 

 

class Circle(Shape):

 

def __init__(self, radius):

 

self.radius = radius

 

 

 

def area(self):

 

return 3.14 * self.radius ** 2 

 

 

 

class Rectangle(Shape):

 

def __init__(self, width, height):

 

self.width = width

 

self.height = height

 

 

 

def area(self):

 

return self.width * self.height

 

 

 

def calculate_area(shape):

 

return shape.area() # 多态性体现在这里,无论是Circle还是Rectangle对象,都可以调用area方法

 

 

 

circle = Circle(5)

 

rectangle = Rectangle(4, 6)

 

print(calculate_area(circle)) # 输出圆的面积

 

print(calculate_area(rectangle)) # 输出矩形的面积

、元类与类的创建

元类(Metaclass)是创建类的“类”。在Python中,类本身也是对象,元类就是用来创建这些类对象的类。通常情况下,我们不需要直接操作元类,但在某些高级用法,如自动注册类、控制类的创建等场景中,元类非常有用。

python复制代码

 

class Meta(type):

 

def __init__(cls, name, bases, dct):

 

print(f"Creating class {name}")

 

super().__init__(name, bases, dct)

 

# 在这里可以对类进行额外操作,如注册、修改属性等

 

 

 

class MyClass(metaclass=Meta):

 

pass 

 

 

 

# 当MyClass被定义时,会触发Meta类的__init__方法,输出:Creating class MyClass

、属性装饰器

Python还提供了几个内置的属性装饰器,如@property@classmethod@staticmethod,它们用于改变方法的行为,使其表现得像数据属性、类方法或静态方法。

1. @property

将方法转换为只读属性。

python复制代码

 

class Circle:

 

def __init__(self, radius):

 

self._radius = radius

 

 

 

@property

 

def radius(self):

 

return self._radius

 

 

 

@radius.setter

 

def radius(self, value):

 

if value < 0:

 

raise ValueError("Radius cannot be negative")

 

self._radius = value

 

 

 

circle = Circle(5)

 

print(circle.radius) # 读取属性值

 

circle.radius = 10 # 设置属性值

2. @classmethod

将方法绑定到类而不是实例,不需要实例即可调用,且第一个参数约定为表示类本身的cls

python复制代码

 

class MyClass:

 

@classmethod

 

def class_method(cls):

 

print(f"This is a class method of {cls.__name__}")

 

 

 

MyClass.class_method() # 调用类方法

3. @staticmethod

将方法定义为静态方法,即方法既不与类关联也不与实例关联,只是放在类命名空间中的一个普通函数。

python复制代码

 

class MyClass:

 

@staticmethod

 

def static_method():

 

print("This is a static method")

 

 

 

MyClass.static_method() # 调用静态方法

 

 

目录
相关文章
|
28天前
|
Python
python基本用法
【9月更文挑战第5天】python基本用法
38 7
|
4天前
|
前端开发 Python
Python编程的面向对象(二)—类的多态
Python编程的面向对象(二)—类的多态
12 7
|
3天前
|
IDE Java 开发工具
Python类与面向对象
Python类与面向对象
|
5天前
|
Python
Python中正则表达式(re模块)用法详解
Python中正则表达式(re模块)用法详解
13 2
|
7天前
|
关系型数据库 MySQL Python
mysql之python客户端封装类
mysql之python客户端封装类
|
8天前
|
Python
python 类中的内置方法
python 类中的内置方法
|
19天前
|
人工智能 数据挖掘 开发者
Python用法
Python用法
23 10
|
5天前
|
Python
Python变量用法——单下划线变量名_ 原创
Python变量用法——单下划线变量名_ 原创
16 0
|
5天前
|
Python
Python变量用法——变量解包
Python变量用法——变量解包
15 0
|
6天前
|
Python
Python类中属性和方法区分3-8
Python类中属性和方法区分3-8
下一篇
无影云桌面