【问题标题】:Python: how to create a class with objects and attributes [closed]Python:如何创建具有对象和属性的类 [关闭]
【发布时间】:2016-04-01 16:18:14
【问题描述】:

我是 python 新手。我正在学习面向对象的编程。我想创建一个包含 3 个对象的类,每个对象有 5 个属性。

我的类叫做“Slot”,三个对象叫做“CPM”、“IOM”、“MDA”,三个对象都有相同的五个属性

1)SerialNumber 
2)PartNumber
3)Name 
4)Status
5)Type

您能否举个例子说明如何做到这一点,以及在创建对象时如何打印所有 5 个属性。

任何例子都会受到更多的赞赏,即使它们有不同的名字。

【问题讨论】:

标签: python function class object attributes


【解决方案1】:

您的问题似乎很基本。你可以很容易地找到信息... 听起来你只是想要有人为你工作。

但这次让我们花点时间。 如果我了解您想要 3 个“插槽”结构实例。就是这样 ? 一种可能性是:

class Slot:
# the '__init__' method is the constructor
# the first argument must be 'self' (as with any method belonging to the class)
#the advantage of giving default values (here 'None') is that you do not have to care the parameter order when calling the method
    def __init__(self,SerialNumber=None,PartNumber=None,
                 Name=None,Status=None,Type=None):
        self.SerialNumber = SerialNumber
        self.PartNumber = PartNumber
        self.Name = Name
        self.Status = Status
        self.Type = Type
        print('Name: ',Name,' ; SerialNumber: ',SerialNumber,
              ' ; PartNumber: ',PartNumber,
              ' ; Status: ',Status,' ; Type: ',Type)

# further in the code, you create the instances of the object Slot
CPM = Slot(Name='CPM', PartNumber='toto', Type='poo')# just to show you can give any parameter in any order
IOM = Slot(Name='IOM')
MDA = Slot(Name='MDA')
# to access the values of instances:
print('CPM name: ',CPM.Name)
print('CPM Type: ', CPM.Type)
CPM.Type = 'paa'
#...

【讨论】:

    【解决方案2】:

    应该这样做:

    class Slot:
        def __init__(*parameters*):
            self.cpm = CPM.CPM(*sub parameters*)
            self.iom = IOM.IOM(*sub parameters*)
            self.mda = MDA.MDA(*sub parameters*)
    
    
    
    class CPM:
        def __init__(*sub parameters*):
            self.SerialNumber = *parameter*
            self.PartNumber = *parameter*
            self.Name = *parameter*
            self.Status = *parameter*
            self.Type = *parameter*
    
            print 'CPM:\n\tSerialNumber: '+self.SerialNumber\n\tPartNumber: '+self.PartNumber\n\tName: '+self.Name\n\tStatus: '+self.Status\n\tType: '+self.Type
    
    class IOM:
        def __init__(*sub parameters*):
            self.SerialNumber = *parameter*
            self.PartNumber = *parameter*
            self.Name = *parameter*
            self.Status = *parameter*
            self.Type = *parameter*
    
            print 'IOM:\n\tSerialNumber: '+self.SerialNumber\n\tPartNumber: '+self.PartNumber\n\tName: '+self.Name\n\tStatus: '+self.Status\n\tType: '+self.Type
    
    class MDA:
        def __init__(*sub parameters*):
            self.SerialNumber = *parameter*
            self.PartNumber = *parameter*
            self.Name = *parameter*
            self.Status = *parameter*
            self.Type = *parameter*
    
            print 'MDA:\n\tSerialNumber: '+self.SerialNumber\n\tPartNumber: '+self.PartNumber\n\tName: '+self.Name\n\tStatus: '+self.Status\n\tType: '+self.Type
    
    slot = Slot.Slot(*parameters*)
    

    【讨论】:

      【解决方案3】:

      以下示例应该按照您的要求进行。让类初始化程序打印出信息对我来说似乎并不明智,因此在主函数中执行手动打印。不过,更改它是微不足道的,留给读者作为练习。

      #! /usr/bin/env python3
      
      
      def main():
          cpm = Widget(12, 34, 'A', True, int)
          iom = Widget(56, 78, 'B', False, str)
          mda = Widget(90, 12, 'C', None, bytes)
          s = Slot(cpm, iom, mda)
          print(s)
      
      
      class Slot:
      
          def __init__(self, cpm, iom, mda):
              self.cpm = cpm
              self.iom = iom
              self.mda = mda
      
          def __repr__(self):
              return '{!s}({!r}, {!r}, {!r})'.format(
                  type(self).__name__, self.cpm, self.iom, self.mda)
      
      
      class Widget:
      
          def __init__(self, serial_number, part_number, name, status, kind):
              self.serial_number = serial_number
              self.part_number = part_number
              self.name = name
              self.status = status
              self.kind = kind
      
          def __repr__(self):
              return '{!s}({!r}, {!r}, {!r}, {!r}, {!r})'.format(type(self).__name__,
                                                                 self.serial_number,
                                                                 self.part_number,
                                                                 self.name,
                                                                 self.status,
                                                                 self.kind)
      
      
      if __name__ == '__main__':
          main()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-28
        • 2010-12-04
        • 1970-01-01
        • 2015-08-28
        • 1970-01-01
        相关资源
        最近更新 更多