使用对象的某些属性在其他类中创建其他对象

时间:2014-01-22 14:41:57

标签: python class variables object

对于为医生(专科医生)创建时间表的程序,我想使用由不同类创建的对象的某些属性,以便在为医生制定时间表的类中使用。

class makePatient(object):
  def __init__(self,name,room):
      self.name = name
      self.room = room
  def getPatient(self):
      print(self.name)
      print(self.room)

class makeSpecialist(object):
  def __init__(self,name,specialization,timetable):
      self.name = name
      self.specialization = specialization
      self.timetable = timetable
  def getSpecialist(self):
       print(self.name)
       print(self.specialization)
       print(self.timetable)

class makeAgenda(object):
   def addAgenda(self):
      self.timetable.append()
#I want to append the name of the patient I have defined here.
      print(self.timetable)

patient1 = makePatient("Michael","101")
specialist1 = makeSpecialist("Dr. John","Hematology",[])

我现在该怎么做,以确保名称“迈克尔”被添加到专家约翰博士的名单中?

在此先感谢,如有需要,我会提供更多详情!

3 个答案:

答案 0 :(得分:2)

我认为另一种方法会更好;您可以将整个makePatient对象放入专家的时间表中:

specialist1 = makeSpecialist("Dr. John", "Hematology", [patient1])

现在,您可以在专家的时间表中访问患者的姓名和其他属性:

for patient in specialist1.timetable:
    print(patient.name)

您还可以定义一个__repr__方法来告诉Python如何显示对象,而不是当前的getPatient

class makePatient(object):
    # ...
    def __repr__(self):
        return "{0} (room {1})".format(self.name, self.room)

现在打印整个时间表时:

>>> print(specialist1.timetable)

您获得了必要的信息:

[Michael (room 101)] 

另请注意,应该简单地调用类,PatientSpecialistAgenda;隐含make

最后,您会在makeAgenda.addAgenda中收到错误,因为__init__没有self.timetablemakeAgenda对象不存在,append()为空{{1}}无论如何都没有做任何事情。

答案 1 :(得分:1)

类通常用于表示允许的实体和操作,包括构造或制作它们的新实例。因此,您的类名称会更好地命名为PatientSpecialistAgenda。在Python中构造任何类的新实例的方法的名称始终为__init__()

也就是说,在创建PatientSpecialist之后,您可以将患者实例添加到专家的时间表/议程中,方法是将其传递给专门为此目的设计的Specialist方法。换句话说,专家“拥有”一个名为timetable的议程实例,可以通过适当命名的add_to_timetable()方法添加患者。

这就是我的意思 - 请注意我已修改您的代码以遵循PEP 8 -- Style Guide for Python Code指南,我建议您遵循这些指南:

class Agenda(object):
    def __init__(self):
        self.events = []
    def append(self, event):
        self.events.append(event)

class Patient(object):
    def __init__(self, name, room):
        self.name = name
        self.room = room
    def get_patient(self):
        print(self.name)
        print(self.room)

class Specialist(object):
    def __init__(self, name, specialization):
        self.name = name
        self.specialization = specialization
        self.timetable = Agenda()
    def add_to_timetable(self, patient):
        self.timetable.append(patient)
    def get_specialist(self):
        print(self.name)
        print(self.specialization)
        print(self.timetable)

specialist1 = Specialist("Dr. John", "Hematology")
patient1 = Patient("Michael", "101")
specialist1.add_to_timetable(patient1)

答案 2 :(得分:0)

我不太确定你在这里尝试使用只打印值的方法或者使用makeAgenda类来完成什么,但是这里有你如何在John博士的名单中找到迈克尔:

specialist1.timetable.append(patient1.name)