Python 实例方法语法

Python Instance method syntax

提问人:Frederic 提问时间:11/1/2023 最后编辑:Frederic 更新时间:11/1/2023 访问量:59

问:

编辑了这个问题,因为它完全没有明确说明*

因此,我有一个类 Data,其中许多变量被初始化为列表。 我想创建一个语法有点像这样的方法:

class Data:
    def __init__(self):
        #I‘ve included only one element in the respective lists, but there are in fact hundreds of them. Just to give an Idea of the faceplate
        self.motors = [[‘MBuild_SCREWPUMP_01’],[‘341PDR-A01’],[‘Building’], [‘7.5kW’]]
        self.valves = [[‘TAG-Name’],[‘PandID Number’],[‘AREA’],[‘Power’]]
    def sort_by_PID(self):
        #here some code that would return a sorted list, it doesn’t work with embedded sorting methods since each list element is itself a list, whose order cannot change due to compatibility issues in other applications

然后后来我会写这样的东西:

data = Data()
some_list = data.motors.sort_by_PID()
some_other_list = data.valves.sort_by_PID()

上面的两个列表将根据它们的列表进行排序[1]

所以基本上我想我想知道是否有一种方法可以“回顾”Class.instance_variable结构(后面的一个或几个点)并在那里找到它应该更改的实例变量。

或者,唯一可以实现的方法是使用 self.motors = Motors() 进行实例化,这反过来又会具有此嵌入式方法。

Python 方法 实例

评论

1赞 JonSG 11/1/2023
作为替代方案,您能否这样做,以便您可以传递“电机”并取回排序的电机列表?如果这对你有用,那么你的方法就可以了def sort_by_name(self, name)return sorted(getattr(self, name))
0赞 pho 11/1/2023
什么是 、 、 、 、 和 ?如果它们只是字符串,那么给你你想要的。如果不是,where 是一个函数,它接受这些列表包含的任何类型的对象,并返回键来对其进行排序,将完成这项工作BCAWZXTsorted(data.motors)sorted(data.motors, key=some_func)some_func
0赞 D.L 11/1/2023
您可能想尝试 DataClasses: youtu.be/vXgg0dFn7II

答:

2赞 RFA 11/1/2023 #1

在这种情况下,您可以做到

sorted(Data.motors)

因为 Sorted() 方法已经由 Python 为您实现,并且完全符合您的要求。

以下是使用 python 提供的 sorted() 的代码的样子。

class Data:
    def __init__(self):
        self.motors = [B, C, A, W, Z, X, T]
        self.valves = [B, C, A, W, Z, X, T]
        self.process_signals = [B, C, A, W, Z, X, T]
        self.general_signals = [B, C, A, W, Z, X, T]
        self.external_modules = [B, C, A, W, Z, X, T]
        self.automatics = [B, C, A, W, Z, X, T]

data = Data() # make sure not to name your variable the same thing as your class name
some_list = sorted(data.motors)
some_other_list = sorted(data.valves)

不过,这不会改变原始属性,要做到这一点,您必须对属性执行 .sort(),如下所示。 这已经通过 python 在列表类上为您实现。data.motors.sort()

为了完全按照您的要求执行操作,您必须创建另一个类并将其嵌入到您的数据类中。

所以你有一个 Data 类,你会有

self.motors = Motor()

然后在 Motor 类中,您将拥有sort_by_name的方法。但是,就像我上面说的,由于您的电机和阀门属性现在只是列表,因此您可以使用 python 提供的内置方法。