Класс Python - хранение и обращение к экземплярам - PullRequest
2 голосов
/ 12 апреля 2019

Я пытаюсь создать класс, который содержит: пространство имен, путь к файлу и данные набора данных (список), содержащиеся в нем.

У меня есть пользовательский интерфейс, который позволит мне добавить новую «запись» длякаждый вводимый мной символ.

Пока у меня есть это:

mainlist = []

class chRecord:
    def __init__(self, namespace, filepath, selSets =[]):
        self.namespace = namespace
        self.filepath = filepath
        self.selSets = selSets


aName = "John:"
aAge = "C:/temp/"
aSelSets = "Animation:stuff_Junk 0-10, 
animation:bob_jeff 10-30"

characterRecord = chRecord(aName,aAge,aSelSets)

mainlist.append(characterRecord)

aName = "John2:"
aAge = "C:/temp/"
aSelSets = "Animation:stuff_Junk2 0-10, 
animation:bob_jeff2 10-30"

characterRecord = chRecord(aName,aAge,aSelSets)

mainlist.append(characterRecord)

Моя проблема в том, как мне тогда искать mainList, чтобы найти запись, которую я ищу.Т.е. «Джон», а затем найти данные о пространстве имен, пути к файлу и наборе выборок?

Извините, если моя терминология неверна в некоторых случаях!

Приветствия.

Ответы [ 4 ]

1 голос
/ 12 апреля 2019

Хотя он обычно используется в качестве полноценного каркаса веб-сайта, модель Django довольно точно совпадает с тем, что вы пытаетесь сделать с фильтрацией:

from django.db import models


class CHRecord(models.Model):
    namespace = models.CharField(max_length=32)
    filepath = models.FileField()
    # Not sure what this represents in your question, but if you use
    # PostgreSQL as your backend, might want an Array
    sel_sets = models.CharField(max_length=512)

# Saves a row to a database (local SQLite by default)
CHRecord.objects.create(namespace="John:", filepath="C:/temp/", sel_sets="xyz")

# Get matching rows translating to a SQL query
CHRecord.objects.filter(namespace__contains="John")
0 голосов
/ 12 апреля 2019

Если вам нужно форсировать уникальные значения, вы можете использовать словарь. Просто установите для ключа уникальное значение или значение, которое должно быть уникальным.

Это должно выполняться быстрее, чем зацикливание, но переопределит данные, если ключи не уникальны.

mainlist = {}

class chRecord:
    def __init__(self, namespace, filepath, selSets =[]):
        self.namespace = namespace
        self.filepath = filepath
        self.selSets = selSets


aName = "John:"
aAge = "C:/temp/"
aSelSets = "Animation:stuff_Junk 0-10, animation:bob_jeff 10-30"

mainlist[aName] = chRecord(aName,aAge,aSelSets)
print(mainlist[aName].selSets)

aName = "John2:"
aAge = "C:/temp/"
aSelSets = "Animation:stuff_Junk2 0-10, animation:bob_jeff2 10-30"

mainlist[aName] = chRecord(aName,aAge,aSelSets)

print(mainlist.get('John2:').namespace)
print(mainlist.get('John2:').filepath)
print(mainlist.get('John2:').selSets)
0 голосов
/ 12 апреля 2019

Просмотрите список и сопоставьте атрибут namespace.

for record in mainlist:
    if record.namespace == 'John':
        # the record is found, now you can access the attributes with `record.filepath`
        print(record)
0 голосов
/ 12 апреля 2019

Вам необходимо создать функцию, которая принимает в качестве аргумента список записей и поиск по имени. Затем он вернет сопоставленную запись, и вы сможете получить из нее дополнительную информацию.

Пример:

mainlist = []


def find_record_by_name(records, name):
    for record in records:

        if record.namespace == name:
            return record


class chRecord:
    def __init__(self, namespace, filepath, selSets=[]):
        self.namespace = namespace
        self.filepath = filepath
        self.selSets = selSets


aName = "John:"
aAge = "C:/temp/"
aSelSets = "Animation:stuff_Junk 0-10, animation:bob_jeff 10-30"

characterRecord = chRecord(aName, aAge, aSelSets)

mainlist.append(characterRecord)

aName = "John2:"
aAge = "C:/temp/"
aSelSets = "Animation:stuff_Junk2 0-10,animation:bob_jeff2 10-30"

characterRecord = chRecord(aName, aAge, aSelSets)

mainlist.append(characterRecord)

selected_record = find_record_by_name(mainlist, "John:")

if selected_record:
    print(selected_record.namespace)
    print(selected_record.filepath)
    print(selected_record.selSets)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...