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() # 调用静态方法

 

 

目录
相关文章
|
27天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
103 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
3月前
|
Python
Python三引号用法与变量详解
本文详细介绍了Python中三引号(`&quot;&quot;&quot;` 或 `&#39;&#39;&#39;`)的用法,包括其基本功能、如何在多行字符串中使用变量(如f-string、str.format()和%操作符),以及实际应用示例,帮助读者更好地理解和运用这一强大工具。
159 2
|
4月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
50 2
|
4月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
45 1
|
4月前
|
缓存 测试技术 开发者
深入理解Python装饰器:用法与实现
【10月更文挑战第7天】深入理解Python装饰器:用法与实现
38 1
|
4月前
|
传感器 大数据 数据处理
深入理解Python中的生成器:用法及应用场景
【10月更文挑战第7天】深入理解Python中的生成器:用法及应用场景
156 1
WK
|
4月前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
36 0
|
4月前
|
Python
深入了解Python中星号变量的特殊用法
深入了解Python中星号变量的特殊用法
46 0
|
4月前
|
PyTorch 测试技术 算法框架/工具
Python中Thop库的常见用法和代码示例
肆十二在B站分享了关于THOP(Torch-OpCounter)的实战教学视频。THOP是一个用于计算PyTorch模型操作数和计算量的工具,帮助开发者评估模型复杂度和性能。本文介绍了THOP的安装、使用方法及基本用例,包括如何计算模型的FLOPs和参数量。
255 0

热门文章

最新文章