当前位置: 首页 > 面试题库 >

从类方法创建新的类实例

黄高爽
2023-03-14
问题内容

我希望能够通过在已实例化的对象上调用方法来创建对象的新实例。例如,我有一个对象:

organism = Organism()

我希望能够调用organism.reproduce()并拥有两个有机体类型的对象。此时我的方法如下所示:

class Organism(object):
    def reproduce():
        organism = Organism()

并且我非常确定它不起作用(我甚至不确定如何测试它。我在本文中尝试了gc方法)。那么,如何使我的对象创建自己的副本,就像我创建的第一个对象(带有organism = Organism())一样,该副本是可访问的?


问题答案:
class Organism(object):
    def reproduce(self):
        #use self here to customize the new organism ...
        return Organism()

另一个选项-如果self方法中未使用实例():

class Organism(object):
    @classmethod
    def reproduce(cls):
        return cls()

这样可以确保生物产生更多的生物,以及(源自生物的假想的博格产生更多的博格)。

无需使用的另一个好处self是,除了可以从实例调用之外,现在还可以直接从类中调用它:

new_organism0 = Organism.reproduce()  # Creates a new organism
new_organism1 = new_organism0.reproduce()  # Also creates a new organism

最后,如果在方法中同时使用了实例(self)和类(Organism或从子类调用的子类):

class Organism(object):
    def reproduce(self):
        #use self here to customize the new organism ...
        return self.__class__()  # same as cls = type(self); return cls()

在每种情况下,您都可以将其用作:

organism = Organism()
new_organism = organism.reproduce()


 类似资料:
  • 问题内容: 我有点困惑。问题是标题,这就是为什么我要问。我在单个VM上运行了JSF + JPA Web应用程序。JPA类具有字段。现在想象一下某个网络用户打开了一个页面并执行以下代码 当另一个Web用户/线程尝试读取该瞬态值时,我期望什么输出: 换句话说,就JVM而言,方法是否总是返回新的类实例或相同或“取决于”的实例?我一直在通过JSR-220寻找答案,但没有成功,任何帮助或文档参考都将不胜感激

  • 问题内容: 在Python中,我希望能够创建一个既充当类函数又充当实例方法的函数,但是具有更改行为的能力。用例是针对一组可序列化的对象和类型。举个例子: 我知道给定Python源中funcobject.c中classmethod()的定义,这看起来像使用C模块一样简单。有没有办法从python内部执行此操作? 谢谢! 有了描述符的提示,我可以使用以下代码来做到这一点: 谢谢亚历克斯! 问题答案:

  • 问题内容: 我正在创建一个类及其子类,需要在其中调用父级的静态方法以返回子级实例。 问题答案: 该静态方法被调用,其值是类对象,子类,你把它称为后的构造。因此,您可以使用实例化它:

  • 本文向大家介绍php创建类并调用的实例方法,包括了php创建类并调用的实例方法的使用技巧和注意事项,需要的朋友参考一下 PHP类定义 PHP 定义类通常语法格式如下: 解析如下: 类使用 class 关键字后加上类名定义。 类名后的一对大括号({})内可以定义变量和方法。 类的变量使用 var 来声明, 变量也可以初始化值。 函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问

  • 问题 你想创建一个新的拥有一些额外功能的实例属性类型,比如类型检查。 解决方案 如果你想创建一个全新的实例属性,可以通过一个描述器类的形式来定义它的功能。下面是一个例子: # Descriptor attribute for an integer type-checked attribute class Integer: def __init__(self, name):