gpt4 book ai didi

静态方法中的 Python 引用子类

转载 作者:太空狗 更新时间:2023-10-30 00:30:33 26 4
gpt4 key购买 nike

这将很难解释,但我想做的是创建一个 Base 对象以作为其他对象的基础。基类处理共享任务,这样子类就不需要继续实现它们。但是,我还需要一个创建类实例的静态/类方法。例如,这是我的基类:

class Base(object):
def __init__(self, service, reference, vo=None):
self.service = service
self.reference = reference
self.id = reference.getId()
self.name = reference.getName()
# do a database lookup here to get more information

@staticmethod
def get_objects(service, references, as_dict=False):
"""
More efficient way to get multiple objects at once. Requires the service
instance and a list or tuple of references.
"""
vo_list = database.get_objects_from_references(references)
items = list()
for vo in vo_list:
items.append(Base(service, vo.getRef(), vo))

return items

get_objects() 方法将获取存储在数据库中的条目的 ID 号列表,然后获取所有这些对象并一次性从中创建对象,而不是为每个 ID 访问数据库。我遇到的问题是我必须在该方法中使用 Base() 来实例化该类。但这实例化了基类,而不是子类:

class Something(Base):
def __init__(self, service, reference, vo=None):
Base.__init__(self, service, reference, vo)
do_extra_stuff()

我的问题是我不知道我是否这样做:

Something.get_objects(service, references)

它会只运行 Base 的 init() 方法,还是会运行子类的 init() 方法(和 do_extra_stuff() 方法)?

最佳答案

你想要一个 class method相反,它将获取类对象作为其第一个参数,以便您可以构建该特定类的实例:

@classmethod
def get_objects(cls, service, references, as_dict=False):
"""
More efficient way to get multiple objects at once. Requires the service
instance and a list or tuple of references.
"""
vo_list = database.get_objects_from_references(references)
items = list()
for vo in vo_list:
items.append(cls(service, vo.getRef(), vo))

return items

关于静态方法中的 Python 引用子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5767308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com