Python:如何使用对象和属性创建类

时间:2016-04-01 16:18:14

标签: python function class object attributes

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

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

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

你能给我一个如何做到这一点的例子,以及如何在创建对象时打印所有5个属性。

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

3 个答案:

答案 0 :(得分:1)

这应该这样做:

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*)

答案 1 :(得分:1)

你的问题似乎非常基本。你可以很容易地找到这些信息...... 听起来你只是想要一个为你工作的人。

但是让我们暂时给它一点时间。 如果我理解你想要'Slot'结构的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 :(得分:1)

以下示例应按您的要求执行。有一个类初始化程序打印输出信息似乎不明智,因此在主函数中执行手动打印。改变这一点虽然微不足道,但仍留作读者的练习。

#! /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()