Python魔法方法

简介: 1.构造和析构_ _init_ _它相当于其他面向对象编程语言的构造方法,也就是类在实例化成对象的时候首先会调用的一个方法


1.构造和析构


_ _init_ _


它相当于其他面向对象编程语言的构造方法,也就是类在实例化成对象的时候首先会调用的一个方法


class A:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def getArea(self):
        return self.x * self.y
a = A(2, 4)
print(a.getArea())  # 8


_ _new_ _


_ _new_ _()才是在一个对象实例化的时候调用的第一个方法。它与其他魔法方法不同,它的第一个参数不是self而是这个类(cls),而其他的参数会直接传递给_ _init_ _()方法

_ _new_ _()方法平时很少去重写它,一般让Python用默认的方案执行就可以了。但是有一种情况需要重写这个魔法方法,就是当继承一个不可变的类型的时候,它的特性就显得尤为重要了

该类会改变str的默认行为,使之返回全部大写的字符串:


class A(str):
    def __new__(cls, string):
        string = string.upper()
        return str.__new__(cls, string)
a = A("I Love You!")
print(a)  # I LOVE YOU!


2.属性访问


属性相关的魔法方法:



实例:
class C:
    def __getattribute__(self, item):
        print("属性被访问!")
        return super().__getattribute__(item)
    def __setattr__(self, key, value):
        print("属性已被设置!")
        super().__setattr__(key, value)
    def __delattr__(self, item):
        print("属性已被删除!")
        super().__delattr__(item)
    def __getattr__(self, item):
        print("访问的属性不存在")
c = C()
c.x
# 属性被访问!
# 访问的属性不存在
c.x = 1  # 属性已被设置!
c.x  # 属性被访问!
del c.x  # 属性已被删除!


3.描述符


描述符相关的魔法方法:



实例:



由于MyDescriptor实现了_ _get_ _()、_ _set_ _()和_ _delete_ _()方法,并且将它的类实例指派给Test类的属性,所以MyDescriptor就是描述符类

实例化Test类,然后尝试对x属性进行各种操作,看看描述符类会有怎样的响应:



当访问x属性的时候,Python会自动调用描述符的_ _get_ _()方法,几个参数的内容分别是:self是描述符类自身的实例;instance是这个描述符的拥有者所在的类的实例,在这里也就是Test类的实例;owner是这个描述符的拥有者所在的类本身

目录
相关文章
|
4天前
|
Python
python魔法方法如何应用
这个Python示例展示了类继承和方法重写。`Student`类继承自`Person`,并覆盖了`say_hello`方法。通过`super().__init__(name)`调用父类的`__init__`初始化`name`属性,`Student`添加了`age`属性,并在重写的`say_hello`中使用。创建`Student`实例`student`并调用其`say_hello`,输出定制的问候信息。
15 1
|
27天前
|
存储 并行计算 Java
Python读取.nc文件的方法与技术详解
本文介绍了Python中读取.nc(NetCDF)文件的两种方法:使用netCDF4和xarray库。netCDF4库通过`Dataset`函数打开文件,`variables`属性获取变量,再通过字典键读取数据。xarray库利用`open_dataset`打开文件,直接通过变量名访问数据。文中还涉及性能优化,如分块读取、使用Dask进行并行计算以及仅加载所需变量。注意文件路径、变量命名和数据类型,读取后记得关闭文件(netCDF4需显式关闭)。随着科学数据的增长,掌握高效处理.nc文件的技能至关重要。
85 0
|
28天前
|
Python
python中文件和异常处理方法(二)
python中文件和异常处理方法(二)
13 0
|
28天前
|
Python
python中文件和异常处理方法(一)
python中文件和异常处理方法(一)
28 0
|
28天前
|
Python
python中文件和异常处理方法(三)
python中文件和异常处理方法(三)
18 0
|
27天前
|
数据处理 Python
python进行二进制数据处理的方法
python进行二进制数据处理的方法
15 0
|
5天前
|
机器学习/深度学习 人工智能 算法
|
5天前
|
安全 Python
python字典的内置方法
Python字典主要方法包括:`keys()`(返回所有键)、`values()`(返回所有值)、`items()`(返回所有键值对)、`get()`(安全取值,键不存在时返回默认值)、`setdefault()`(设置默认值)、`update()`(合并字典)、`pop()`(删除并返回值)、`clear()`(清空字典)、`copy()`(浅拷贝)、`fromkeys()`(新建字典并设置默认值)、`popitem()`(随机删除键值对)。
6 0
|
13天前
|
存储 Python
python基础篇: 详解 Python 字典类型内置方法
python基础篇: 详解 Python 字典类型内置方法
25 1
|
16天前
|
Java 测试技术 Python
Python开启线程和线程池的方法
Python开启线程和线程池的方法
12 0
Python开启线程和线程池的方法