如何获取 class 的所有实例
How to get all instances of a class
我正在学习 Python 作为初学者,我想创建一个 class Person
。在构造函数中,我想将我创建的每个实例放入一个名为 'instances' 的集合中。然后我想要 return 所有实例的 instances() 方法。我该怎么做?
class Person:
# Type annotations
__first_name: str
__last_name: str
instances: set
# Initializing variables
no_of_persons = 0
instances = set()
def __init__(self, firstname="unknown", lastname="unknown"):
self.__first_name = firstname
self.__last_name = lastname
Person.no_of_persons += 1
Person.instances.add() ## Here I have problems
@property
def first_name(self):
return self.__first_name
@first_name.setter
def first_name(self, firstname):
self.__first_name = firstname
@property
def last_name(self, ):
return self.__last_name
@last_name.setter
def last_name(self, lastname):
self.__last_name = lastname
def getFullName(self):
""" Returns a tuple of the firstname and the lastname """
return (self.__first_name, self.__last_name)
def summary(self):
""" Returns a dictionary of all instance variables """
return {'first_name': self.__first_name,
'last_name': self.__last_name}
@staticmethod
def number_of_persons():
return Person.no_of_persons
@staticmethod
def instances():
return Person.instances
p1 = Person()
Person.number_of_persons()
Person.instances()
您需要将 self
添加到集合中。
Person.instances.add(self)
或更地道
self.__class__.instances.add(self)
此外,您需要为获取实例的方法使用不同的名称;它应该是一个类方法,而不是静态方法。
@classmethod
def get_instances(cls):
return cls.instances
尽管实际上您根本不需要这里的方法,因为您可以直接访问 Person.instances
(属性)。
我正在学习 Python 作为初学者,我想创建一个 class Person
。在构造函数中,我想将我创建的每个实例放入一个名为 'instances' 的集合中。然后我想要 return 所有实例的 instances() 方法。我该怎么做?
class Person:
# Type annotations
__first_name: str
__last_name: str
instances: set
# Initializing variables
no_of_persons = 0
instances = set()
def __init__(self, firstname="unknown", lastname="unknown"):
self.__first_name = firstname
self.__last_name = lastname
Person.no_of_persons += 1
Person.instances.add() ## Here I have problems
@property
def first_name(self):
return self.__first_name
@first_name.setter
def first_name(self, firstname):
self.__first_name = firstname
@property
def last_name(self, ):
return self.__last_name
@last_name.setter
def last_name(self, lastname):
self.__last_name = lastname
def getFullName(self):
""" Returns a tuple of the firstname and the lastname """
return (self.__first_name, self.__last_name)
def summary(self):
""" Returns a dictionary of all instance variables """
return {'first_name': self.__first_name,
'last_name': self.__last_name}
@staticmethod
def number_of_persons():
return Person.no_of_persons
@staticmethod
def instances():
return Person.instances
p1 = Person()
Person.number_of_persons()
Person.instances()
您需要将 self
添加到集合中。
Person.instances.add(self)
或更地道
self.__class__.instances.add(self)
此外,您需要为获取实例的方法使用不同的名称;它应该是一个类方法,而不是静态方法。
@classmethod
def get_instances(cls):
return cls.instances
尽管实际上您根本不需要这里的方法,因为您可以直接访问 Person.instances
(属性)。