提问人:Frederic 提问时间:11/1/2023 最后编辑:Frederic 更新时间:11/1/2023 访问量:59
Python 实例方法语法
Python Instance method syntax
问:
编辑了这个问题,因为它完全没有明确说明*
因此,我有一个类 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() 进行实例化,这反过来又会具有此嵌入式方法。
答:
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 提供的内置方法。
评论
def sort_by_name(self, name)
return sorted(getattr(self, name))
B
C
A
W
Z
X
T
sorted(data.motors)
sorted(data.motors, key=some_func)
some_func