尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Python类方法间数据共享:实现内部工作流的数据传递

Python类方法间数据共享:实现内部工作流的数据传递 进行面向对象编程时, 想要达成同一类内部不同方法间的数据信息共享, 这属于常见的一种需求。本文会深入去探究怎样借助把类变量Class与装饰器结合运用的方式, 以一种优雅的手法解决一个方法特别是类方法所输出的数据, 则可供同类里其他方法调用这一问题。这样的一种模式对构建清晰、高效的数据处理工作流程是有帮助的。挑战类方法间的数据传递困境设计类之际, 时常碰到这般场景: 其一方法担当数据读取或者初步处理任务, 这个方法得出的结果, 要被同类里的另外一个方法展开进一步分析或者实施操作。径直把一个方法的返回值当作参数传递给另一个方法, 于类实例化的工作流程当中或许并不直观, 甚至在某些情形之下, 像是方法未被设计成接受外部参数之时, 会引发错误。思考一下下面这样一个寻常的数据处理类的例子, 当中有个方法专门承担着读取CSV文件这项工作, 读取完从而返回一个, 有另一个方是打算针对这个返回的进行缺失值的分析。import pandas as pd class DATAA(): def __init__(self, dataset, name, pathNone): self.dataset dataset self.name name self.path path def readData(self): # 假设 self.dataset 是一个文件路径 outputdf pd.read_csv(self.dataset, sep,) return outputdf def MissingData(outputdf): # 注意这里的参数定义 Missing_values outputdf.isna().sum() return Missing_values # 尝试调用 # dataset your_data.csv # 假设已定义 # name sample_data # 假设已定义 # df_instance DATAA(dataset, name) # data_frame df_instance.readData() # missing_info df_instance.MissingData() # 这里会出错因为MissingData没有被正确调用且未接收到data_frame于上述代码里头, 就算返回了, 然而, .()这样的调用方式, 是没办法自动获取到其返回值的。那个方法被定义成了一个得要外部传入参数的普通函数在类的内部, 它是需要self参数的, 此种情况同我们所期望的“内部共享”模式并不相符。解决方案利用类变量和实现数据共享在不直接去传递参数的情形下, 要使得类内部的那些方法, 能够去进行共享, 是由另一个方法所生成的数据, 我们能够采用下面这样的策略:3.14.23.2025年12月5日那次发布的编程语言稳定版本里属于3.14系列第二个维护更新的是14.2, 这版本有18项修复解决多进程、数据类以及正则表达式等模块回归问题还修复CVE - 2025 - 12084等安全漏洞标识自由线程模式便是有移除GIL正式获官方支持此为发展重要里程碑。下载先要定义出一个类变量, 这个类变量是用来存储共享数据的。接着, 使用把生成共享数据的方法标记成类方法, 这样做是为了让其能够直接去修改类变量。然后, 通过self来访问类变量, 这意味着其他实例方法能够借助self关键字去访问并且使用这个类变量。该种方法其核心之处在于, 把数据贮存于一个位置, 此位置对于所有实例以及类方法而言都是可见的,这个位置就是类变量。详细实现步骤让我们修改之前的DATAA类来应用这个解决方案import pandas as pd class DATAA(): # 1. 定义一个类变量来存储共享的DataFrame outputdf None def __init__(self, dataset, name, pathNone): self.dataset dataset self.name name self.path path classmethod def readData(cls, dataset_path): 类方法负责读取数据并将其存储到类变量outputdf中。 cls 参数代表类本身。 # 2. 通过 cls 访问并修改类变量 cls.outputdf pd.read_csv(dataset_path, sep,) print(f数据已加载并存储到类变量 outputdf 中形状为: {cls.outputdf.shape}) def MissingData(self): 实例方法访问类变量outputdf进行缺失值分析。 self 参数代表类的实例。 if self.outputdf is None: raise ValueError(数据尚未通过 readData 方法加载。) # 3. 通过 self 访问类变量 Missing_values self.outputdf.isna().sum() return Missing_values # --- 使用示例 --- # 假设有一个名为 sample_data.csv 的文件 # sample_data.csv 内容示例: # col1,col2,col3 # 1,a,10 # 2,b,20 # 3,,30 # 4,d, # 5,e,50 # 创建一个虚拟的CSV文件用于演示 with open(sample_data.csv, w) as f: f.write(col1,col2,col3\n) f.write(1,a,10\n) f.write(2,b,20\n) f.write(3,,30\n) f.write(4,d,\n) f.write(5,e,50\n) # 实例化类 dataset_file sample_data.csv instance_name my_analysis df_analyzer DATAA(dataset_file, instance_name) # 调用类方法加载数据。注意这里直接传递文件路径给类方法 # 或者可以从实例中获取路径df_analyzer.dataset DATAA.readData(df_analyzer.dataset) # 现在outputdf 类变量已经包含了加载的数据 # 调用实例方法进行缺失值分析 missing_data_info df_analyzer.MissingData() print(\n缺失值信息:) print(missing_data_info) # 清理测试文件 import os os.remove(sample_data.csv)解析之代码, 其值为无: 于类之定义内部, 吾等初始化了一个名为之这般类变量。此便意味着是属于DATAA这般类本身的, 而非某个特定的DATAA之时例。所有DATAA的时例以及DATAA类本身皆能够去访问它的。 方法被装饰器所修饰, 这就让其成为了一个类方法。类方法的首个参数按约定是cls代表类本身的啦, 可不是self代表时例的呀。cls. 等于pd.(...这么个情况): 在类方法内侧 , 吾等借由cls. 去访问并且修改类变量的。如此一来, pd.的返回所得就被径直存储进了类变量里头, 而该类变量对所有DATAA实例而言皆是可见的。在self..isna().sum()这个实例方法当中, 我们依靠self.去访问先前经方法填充好的类变量。虽说乃是类变量, 然而实例方法能够借助self关键字来访问它要是实例自身并不存在同名的实例变量, 那么便会去查找类变量。注意事项以及最佳实践总结。进行巧妙地结合, 使用类变量以及装饰器, 我们能够达成类内部方法之间的数据共享, 特别适用于这样的一种场景, 即一个方法生成数据, 另一个方法去处理数据。这种模式给出了一种清晰的、符合面向对象原则的方式, 用于管理类内部的工作流, 避免了不必要的参数传递, 并且提高了代码的可读性以及维护性。在设计复杂的数据处理类的时候, 理解并且运用这一技巧将会是非常有益的。
返回列表