-1

对于不同的类,我对共享对象有不同的设置(例如:地址)。每次调用该方法时,我都必须加强地址变量 s.addr,因为类 ItemA 和 ItemB 将 s.addr 设置为不同的地址。有没有办法简化这种冗余?

前任:

class ItemA:
def __init__(self,s,addr):
    self.s = s
    self.addr = addr

def a(self,addr):
    self.s.addr=self.addr  # anyway to remove this line that exist in every method
    self.s.run_a()

def b(self,addr):
    self.s.addr=self.addr  # 
    self.s.run_b()

class ItemB:
def __init__(self,s,addr): # take same s as ItemA
    self.s = s
    self.addr = addr
def a(self,addr):
    self.s.addr=self.addr  #
    self.s.run_a()

def c(self,addr):
    self.s.addr=self.addr  #
    self.s.run_c()

ItemsA, B 是随机调用的,因此需要在每个方法中更新地址。

A=ItemA(s,9) # object s, address 9
B=ItemB(s,7) # same object s, but use address 7
A.a()
B.a()
B.c()
A.b()

有关额外信息,它是用 GPIB 控制仪器,每个仪器都有不同的地址。s 期望将通用命令发送到 s.addr 中指定的地址。但对更一般的python问题感兴趣。

4

1 回答 1

0

您有三个类:ItemAItemB和任何生成的类SS对象在 A 和 B 对象之间“共享”。 S每个类都有一个标识符,但 A 和 B 的值不同。您将这两个标识符称为“地址”。您想知道如何维护“该”地址,以便 A 和 B 中的每一个都访问特定于该类的地址。

在我看来,问题很简单:这是两个不同的属性,但您正试图将它们塞进一个。如您所见,这是行不通的。相反,您需要为每个“地址”创建一个属性——仅仅因为 A 和 B 对功能使用相同的外部术语,并不强制您使用单个变量。

例如:

class ItemA:

    def __init__(self,s,addr):
        self.s = s
        self.s_addr = addr
    
    def a(self):
        self.s.run_a(self.s_addr)

这会让你感动吗?

于 2020-09-25T00:51:34.387 回答