Parts Inventory System
You are mixing two very different objects and tasks in your Parts class. On the one side there is the object of a Part and on the other hand there is a dictionary of parts which is your inventory system. You should separate the two:

import sys
from collections import namedtuple


class Part(namedtuple("Part", "name part_number quantity")):
    def __str__(self):
        return ", ".join(self)


class Parts(dict):
    def display (self):
        if not self:
            print('No Parts Found in List')
            return
        print()
        print('Name, Part Number, Quantity')
        for part in self.values():
            print(part)
        print()

    def add(self, *args):
        try:
            name, part_number, quantity = args
        except ValueError:
            name = input("Enter Name of Part:\n ")
            part_number = input("Enter Part Number:\n ")
            quantity = input("Enter Quantity:\n ")
        self[name] = Part(name, part_number, quantity)

    def remove(self, part=""):
        if not part:
            part = input("Enter Part Name to Remove\n")
        try:
            del self[part]
        except Keyerror:
            print("Part {} not found.".format(part))

    def edit(self, part=""):
        if not part:
            part = input("Enter Part Name to Edit\n")
        try:
            new_name = input("Enter new part name\n")
            number = input("Enter new part number\n ")
            quantity = input("Enter new quantity\n ")
            self[part] = Part(new_name, number, quantity)
        except KeyError:
            print("No such Part exists: {}".format(part))

    def save(self, filename=""):
        if not filename:
            filename = input("Filename to save: ")
        with open(filename, "wt") as out_file:
            for part in self.values():
                out_file.write("{}\n".format(part))
        print("File saved")

    def load(self, filename=""):
        if not filename:
            filename = input("Filename to load: ")
        try:
            with open(filename, "rt") as in_file:
                for line in in_file:
                    if not line:
                        break
                    part, part_number, quantity = line.strip().split(",")
                    self.add(part, part_number, quantity)
        except FileNotFoundError:
            print("File Not Found.")


def menu(inventory):
    menu_list = [("Parts", inventory.display),
                 ("Add Part", inventory.add),
                 ("Remove Part", inventory.remove),
                 ("Edit Part", inventory.edit),
                 ("Save Part List", inventory.save),
                 ("Load Part List", inventory.load),
                 ("Exit", sys.exit)]
    while True:
        for i, (name, _) in enumerate(menu_list, 1):
            print("{}. {}".format(i, name))
        try:
            user = int(input("Selection&gt; "))
            menu_list[user-1][1]()
        except (ValueError, IndexError):
            print("Selection Not Valid.")

def main():
    print("Welcome to Sticks&amp;Stones Inventory System")
    inventory = Parts()
    while True:
        menu(inventory)

if __name__ == '__main__':
    try:
        main()
    except (KeyboardInterrupt, SystemExit):
        print("Exiting Program...")


Here I made two classes. I also made the inventory a sub-class of dict. This way you don't have to keep an external dictionary (and could even have two different inventories at the same time, maybe for different things?).

All methods of the inventory take parameters if you want to, and ask for them if they are not supplied.

A dict has dict.values which directly gives you a list (or iterable) of all values.

The Part is just a data container, so I used collections.namedtuple here, and just added nicer printing by overriding the magic __str__ method, which is invoked when calling e.g. print(part).