首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当字符串与属性具有相同的值时,如何将字符串转换为属性

当字符串与属性具有相同的值时,如何将字符串转换为属性
EN

Stack Overflow用户
提问于 2021-12-30 23:10:13
回答 1查看 59关注 0票数 0
代码语言:javascript
复制
class Person:  
  __name = ""
  __contacts = [] 
  __age = 0
  __vaccination_state = False
  __health_state = True 
  __quarantine_state = True 
  __symptom = "symptomatic" 

  def __init__(self, name, contacts, age, vaccination_state, health_state, quarantine_state, symptom):
    self.__name = name
    self.__age = age 
    self.__contacts = contacts 
    self.__vaccination_state = vaccination_state
    self.__health_state = health_state
    self.__quarantine_state = quarantine_state
    self.__symptom = symptom 

  def GetName(self):
    return self.__name

  def GetAge(self):
    return self.__age
  
  def GetContacts(self):
    return self.__contacts

  def GetVaccination(self):
    return self.__vaccination_state

  def GetHealth(self):
    return self.__health_state

  def GetQuarantine(self):
    return self.__quarantine_state

  def GetSymptom(self):
    return self.__symptom
 
  def SetName(self, name):
    self.__name = name

  def SetAge(self, age):
    self.__age = age

  def SetAllContacts(self, contacts):
    self.__contacts = contacts 

  def AddSingleContact(self, contact):
    self.__contacts.append(contact)

  def SetVaccination(self, vaccination_state):
    self.__vaccination_state = vaccination_state

  def SetHealth(self, healthState):
    self.__health_state = healthState
    self.CheckPositive()

  def SetQuarantine(self, quarantine_state):
    self.__quarantine_state = quarantine_state
  
  def SetSymptom(self, symptom):
    self.__symptom = symptom 
  def CheckPositive(self):
    if self.__health_state == False: 
      self.__quarantine_state = True
      start = datetime.datetime.now()
      end = start + datetime.timedelta(10)
      for i in range(len(self.__contacts)):
        getattr(Person, self.GetContacts()[i]).SetQuarantine(True)
        print(self.GetContacts()[i], " and his/her close contacts have been notified.\n", "Quarantine starts at", start, "and ends at", end)
        for i in range(len(self.__contacts)):
          getattr(Person, self.GetContacts()[i]).SetQuarantine(True)

A = Person("A", ["Z"], 17, True, True, False, "NA")
Z = Person("Z", ["A"], 17, True, True, False, "NA")
A.SetHealth(False) 

SetQuarantine(True)是我要调用的类中的一个函数。self.GetContacts(i)的返回值是一个列表。因此,self.GetContacts()i是一个字符串,例如,"name“。但是,我希望获得一个属性,以便可以调用函数SetQuarantine(True)。该属性与字符串具有相同的值,但我不知道如何转换它。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-01-01 23:02:15

您的问题源于试图执行以下操作:getattr(Person, self.GetContacts()[i]).SetQuarantine(True)。您正在尝试访问一个不存在的Person.Z属性。因此Python会抛出一个错误。

要解决这个问题,您需要做两件事:

  1. Don't (尝试)使用类级变量。当您希望在类的所有实例之间共享数据时,应该使用类级变量。由于Person的不同实例可以有不同的联系人,因此使用类级变量对Person的每个实例都没有意义,因此需要为每个联系人here.
  2. In存储对Person对象的引用,而不是它们的名称。这让你可以直接设置一个密切接触者的隔离状态。(即使您要创建一个名称查找表,该表也无法处理两个同名人员)。

下面是一个修改后的CheckPositive函数以及一些修改过的驱动程序代码:

代码语言:javascript
复制
def CheckPositive(self):
  if self.__health_state == False: 
    self.__quarantine_state = True
    start = datetime.datetime.now()
    end = start + datetime.timedelta(10)
    for i in range(len(self.__contacts)):
      print(self.__contacts[i].GetName(), "has been notified.\n", "Quarantine starts at", start, "and ends at", end)
      self.__contacts[i].SetQuarantine(True)

A = Person("A", [], 17, True, True, False, "NA")
Z = Person("Z", [], 17, True, True, False, "NA")
A.AddSingleContact(Z)
Z.AddSingleContact(A)
A.SetHealth(False)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70537570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档