Python получить класс экземпляра

How to create a list of objects?

How do I go about creating a list of objects (class instances) in Python? Or is this a result of bad design? I need this cause I have different objects and I need to handle them at a later stage, so I would just keep on adding them to a list and call them later.

@Alfred: hehe, I just find class instances a bit ambiguous, but I see what you mean now through the selected answer 😛

8 Answers 8

Storing a list of object instances is very simple

class MyClass(object): def __init__(self, number): self.number = number my_objects = [] for i in range(100): my_objects.append(MyClass(i)) # Print the number attribute of each instance for obj in my_objects: print(obj.number) 

Where you pass «object» in the first line, is that an actual object or just a number signifying that object instance’s number? If I were to write my_objects(1), I would call to the first object, but I don’t think the 1 being passed in is an object. This might be entirely orthogonal to the educational purposes of the original response, but it would help me on a different, related topic I’m struggling with. Thanks.

You can create a list of objects in one line using a list comprehension.

class MyClass(object): pass objs = [MyClass() for i in range(10)] print(objs) 

@Brainless, in this answer, the MyClass() initializer does not take an argument (in one of the other answers, it does. ).

Читайте также:  Html код валюты рубль

The usual python idiom is to use _ for loop variables that aren’t referenced in the loop body (i.e. objs = [MyClass() for _ in range(10)] )

The Python Tutorial discusses how to use lists.

Storing a list of classes is no different than storing any other objects.

def MyClass(object): pass my_types = [str, int, float, MyClass] 

In Python, the name of the class refers to the class instance. Consider:

class A: pass class B: pass class C: pass lst = [A, B, C] # instantiate second class b_instance = lst[1]() print b_instance 

I have some hacky answers that are likely to be terrible. but I have very little experience at this point.

class myClass(): myInstances = [] def __init__(self, myStr01, myStr02): self.myStr01 = myStr01 self.myStr02 = myStr02 self.__class__.myInstances.append(self) myObj01 = myClass("Foo", "Bar") myObj02 = myClass("FooBar", "Baz") for thisObj in myClass.myInstances: print(thisObj.myStr01) print(thisObj.myStr02) 

A hack way to get this done:

import sys class myClass(): def __init__(self, myStr01, myStr02): self.myStr01 = myStr01 self.myStr02 = myStr02 myObj01 = myClass("Foo", "Bar") myObj02 = myClass("FooBar", "Baz") myInstances = [] myLocals = str(locals()).split("'") thisStep = 0 for thisLocalsLine in myLocals: thisStep += 1 if "myClass object at" in thisLocalsLine: print(thisLocalsLine) print(myLocals[(thisStep - 2)]) #myInstances.append(myLocals[(thisStep - 2)]) print(myInstances) myInstances.append(getattr(sys.modules[__name__], myLocals[(thisStep - 2)])) for thisObj in myInstances: print(thisObj.myStr01) print(thisObj.myStr02) 
import sys class myClass(): def __init__(self, myStr01, myStr02): self.myStr01 = myStr01 self.myStr02 = myStr02 myInstances = [] myClasses = < "myObj01": ["Foo", "Bar"], "myObj02": ["FooBar", "Baz"] >for thisClass in myClasses.keys(): exec("%s = myClass('%s', '%s')" % (thisClass, myClasses[thisClass][0], myClasses[thisClass][1])) myInstances.append(getattr(sys.modules[__name__], thisClass)) for thisObj in myInstances: print(thisObj.myStr01) print(thisObj.myStr02) 

Источник

Получение списка экземпляров класса

Что вы понимаете под фразой объект класса? В смысле свойство экземпляра класса? Они не упорядочены, у них нет индекса. Можно только по называнию свойства.

Я бы хотел вывести например, вот это: «Лил», «1», «Нет» (если индекс 0)В списке находятся элементы my_goom1.

3 ответа 3

Через @classmethod нет возможности переопределить метод __getitem__ класса. При попытке обращения через квадратный скобки будет возникать ошибка TypeError: ‘type’ object is not subscriptable .

Нерабочий пример:

class Goom(object): items = [] def __init__(self, name, seats, jump): """Инициализация""" self.name = name self.seats = seats self.jump = jump Goom.items.append(self) def __str__(self): return "<> <> <>".format(self.name, self.seats, self.jump) @classmethod def __getitem__(cls, index): return cls.item[index] my_goom1 = Goom("Лил", "1", "Нет") my_goom2 = Goom("Мак", "1", "Есть") my_goom3 = Goom("Ной", "1", "Есть") print(Goom[0]) # Traceback (most recent call last): # File "./prog.py", line 24, in # TypeError: 'type' object is not subscriptable 

Как вариант, можно обращаться через само поле со списком объектов:

class Goom(object): items = [] def __init__(self, name, seats, jump): """Инициализация""" self.name = name self.seats = seats self.jump = jump Goom.items.append(self) def __str__(self): return "<> <> <>".format(self.name, self.seats, self.jump) my_goom1 = Goom("Лил", "1", "Нет") my_goom2 = Goom("Мак", "1", "Есть") my_goom3 = Goom("Ной", "1", "Есть") print(Goom.items[0]) 

Источник

Как просто получить имя класса в Python

Чтобы получить имя класса экземпляра в Python, вы можете использовать 2 следующих способа.

  1. используйте комбинацию __class__ и __name__
  2. используйте функцию type() в сочетании с __name__.

Способ 1: комбинация __class__ и __name__

В Python вы можете получить имя класса из экземпляра или самого класса, используя атрибут __class__ вместе с атрибутом __name__.

В этом примере мы определяем MainClass и создаем экземпляр с именем my_instance.

Чтобы получить имя класса из экземпляра, мы обращаемся к атрибуту __class__ экземпляра, за которым следует атрибут __name__ класса.

В качестве альтернативы мы можем получить имя класса непосредственно из класса, обратившись к его атрибуту __name__. Оба метода предоставляют имя класса в виде строки.

Способ 2: использование функции type() с __name__

Вы также можете использовать функцию type() и атрибут __name__, чтобы получить имя класса экземпляра в Python.

В этом примере мы определяем MainClass и создаем экземпляр с именем my_instance.

Чтобы получить имя класса из экземпляра, мы использовали функцию type(), которая возвращает класс экземпляра, а затем обратились к атрибуту __name__, чтобы получить имя класса в виде строки.

Часто задаваемые вопросы

Что такое класс в Python?

Класс в Python — это план для создания объектов. Он определяет набор общих атрибутов и методов для всех объектов этого типа.

Как получить имя класса в Python?

Вы можете использовать атрибут __name__, чтобы получить имя класса в Python. Например, если у вас есть класс, определенный как MainClass:, вы можете получить его имя, используя MainClass.__name__.

Есть ли другой способ получить имя класса в Python?

Да, вы можете использовать функцию type() для получения имени класса в Python. Например, если у вас есть объект obj и вы хотите получить имя его класса, вы можете использовать type(obj).__name__.

Как получить имя класса объекта в виде строки в Python?

Чтобы получить имя класса объекта в виде строки в Python, используйте функцию type() в функции для динамического получения имени класса объекта. Например, вы можете определить функцию, которая принимает объект в качестве аргумента и возвращает имя его класса, используя type(obj).__name__.

Источник

Как вызвать класс зная его имя?

У меня есть класс с заданными элементами. Я знаю имя элемента (.name характеристика) в виде строчки. Как мне получить имея эту строчку (допустим ‘apple’, имя объекта .name тоже ‘apple’) другие заданные характеристики объекта apple — массу, размеры геометрические?

создать массив со всеми объектами класса/-ов, потом пробежаться по нему, и для каждого из элементов проверять, равно ли name — «apple»?

К сожалению, все объекты класса заданы «вручную» внутри кода в виде списка в 20000 объектов свернутых в спойлер. Нет более быстрого способа?

3 ответа 3

# Класс у вас уже есть, привёл его просто для примера class products(object): def __init__(self, name, weight): self.weight = weight self.name = name # Ваши 20000 объектов, которые уже есть в коде: o1 = products('banana', 1) o2 = products('apple', 2) # . o20000 = products('cherry', 3) # А вам нужно дописать что-то подобное # Перебираем все объекты в области видимости for obj in locals().values(): # Если объект является экземпляром класса products # и его свойство name равно 'apple' if isinstance(obj, products) and obj.name == 'apple': # Напечатаем значение его свойства weight print(obj.weight) # Напечатает только число 2, т.к. именно такой weight у объекта с name == 'apple' 

Я немного правил ответ, возможно, вы запускали более раннюю версию. Проверьте, что у вас эта строка выглядит именно так, как сейчас у меня: for obj in locals().values():

for obj in locals().values(): RuntimeError: dictionary changed size during iteration Ругается именно на эту строку.

Источник

Оцените статью