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

 

 

目录
相关文章
|
1天前
|
架构师 开发工具 C++
最新python--类与面向对象-1,一线互联网架构师360°全方面性能调优
最新python--类与面向对象-1,一线互联网架构师360°全方面性能调优
最新python--类与面向对象-1,一线互联网架构师360°全方面性能调优
|
1天前
|
Java 程序员 C语言
2024年Python最新【Python学习教程】Python类和对象_python中类和对象的讲解,Python最新面试题
2024年Python最新【Python学习教程】Python类和对象_python中类和对象的讲解,Python最新面试题
2024年Python最新【Python学习教程】Python类和对象_python中类和对象的讲解,Python最新面试题
|
1天前
|
机器学习/深度学习 Python
关于python字符串format的一些花式用法_format带加号
关于python字符串format的一些花式用法_format带加号
|
1天前
|
SQL 分布式计算 算法
python-静态方法staticmethod、类方法classmethod、属性方法property_python staticmethod类内使用
python-静态方法staticmethod、类方法classmethod、属性方法property_python staticmethod类内使用
|
1天前
|
缓存 Java Python
python-静态方法staticmethod、类方法classmethod、属性方法property_python staticmethod类内使用(1)
python-静态方法staticmethod、类方法classmethod、属性方法property_python staticmethod类内使用(1)
|
6天前
|
Python
Python-类视图和蓝图
Python-类视图和蓝图
11 2
|
6天前
|
存储 Java 数据安全/隐私保护
Python----类对象和实例对象
Python----类对象和实例对象
9 2
|
6天前
|
Python
【Python操作基础】——while语句用法和pass语句
【Python操作基础】——while语句用法和pass语句
|
6天前
|
Python
【Python操作基础】——for语句用法
【Python操作基础】——for语句用法
|
6天前
|
Python
【Python操作基础】——if语句用法
【Python操作基础】——if语句用法