Why do my nested python class instances become tuples?

I have defined some classes:

class CustomParameter():
    def __init__(self, strFriendlyAttribName, strSystemAttribName):
        self.FriendlyAttribName = strFriendlyAttribName
        self.SystemAttribName = strSystemAttribName

class PartMaster():
    AttribNameList = ["Part Number", "Name", "Standard Part", "Part Type", "ControlledBy", "PIN", "Design Responsibility"]

    def __init__(self):
        self._UUID = None

        self.PartNumber = CustomParameter("Part Number", "V_ID"),
        self.Name = CustomParameter("Name", "V_name"),
        self.StandardPart = CustomParameter("Standard Part", "V508_isStandardPart"),
        self.PartType = CustomParameter("Part Type", "V511_PartType"),
        self.ControlledBy = CustomParameter("ControlledBy", "V511_ControlledBy"),
        self.PIN = CustomParameter("PIN", "BOECACPinItemNumber"),
        self.DesignResponsibility = CustomParameter("Design Responsibility", "BOECACDesignRpnse")

class Part():
    def __init__(self, PartNumber):

        self.PartNumber = PartNumber

        #This instance wraps
        self.PartMaster = PartMaster() #create new instance



test = Part("ABC")

I would expect it to test.PartMaster.PINbe an instance of CustomParameter, but instead it is a tuple. tuple: (<__main__.CustomParameter instance at 0x0000000002D724C8>,)Why is this and how can I do it wrong?

I would like to build my classes so that it test.PartMaster.PINreturns an instance of my CustomParameter class instance. Any ideas?

+4
source share
1 answer

Since your instances of the vars class PartMasterare set with commas at the end whenever your class is initialized :)

Python interprets this:

x = 'test',

as:

('test',)

Try this instead:

def __init__(self):
    self._UUID = None

    self.PartNumber = CustomParameter("Part Number", "V_ID")
    self.Name = CustomParameter("Name", "V_name")
    self.StandardPart = CustomParameter("Standard Part", "V508_isStandardPart")
    self.PartType = CustomParameter("Part Type", "V511_PartType")
    self.ControlledBy = CustomParameter("ControlledBy", "V511_ControlledBy")
    self.PIN = CustomParameter("PIN", "BOECACPinItemNumber")

. , , . , , !

+6

All Articles