在一个方法中用另一个相同类型的对象替换一个self对象是否安全?

2024-09-28 01:26:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用方法中的另一个实例替换一个对象实例,如下所示:

class A:
    def method1(self):
        self = func(self)

从数据库检索对象。


Tags: 对象实例方法self数据库defclassfunc
3条回答

据我所知,如果您试图用成员函数中的另一个相同类型的对象(假设func不会更改对象类型)替换当前对象。我想这会实现的

class A:
    def method1(self):
        newObj = func(self)
        self.__dict__.update(newObj.__dict__)

替换“self”变量不太可能完成您要做的任何事情,这不仅仅是通过将func(self)的结果存储在另一个变量中来完成的self'实际上是一个仅在方法调用期间定义的局部变量,用于传入正在操作的类的实例。替换self实际上不会替换对其他对象持有的类的原始实例的引用,也不会创建对分配给它的新实例的持久引用。

这不是对问题的直接回答,但在下面的帖子中,有一个阿米鲁切试图做的解决方案:

下面是工作代码示例(Python3.2.5)。

class Men:
    def __init__(self, name):
        self.name = name

    def who_are_you(self):
        print("I'm a men! My name is " + self.name)

    def cast_to(self, sex, name):
        self.__class__ = sex
        self.name = name

    def method_unique_to_men(self):
        print('I made The Matrix')


class Women:
    def __init__(self, name):
        self.name = name

    def who_are_you(self):
        print("I'm a women! My name is " + self.name)

    def method_unique_to_women(self):
        print('I made Cloud Atlas')


men = Men('Larry')
men.who_are_you()
#>>> I'm a men! My name is Larry
men.method_unique_to_men()
#>>> I made The Matrix


men.cast_to(Women, 'Lana')
men.who_are_you()
#>>> I'm a women! My name is Lana
men.method_unique_to_women()
#>>> I made Cloud Atlas

注意self.__class__而不是self.__class__.__name__。一、 e.这种技术不仅替换类名,而且实际转换类的实例(至少它们都有相同的id())。另外,1)我不知道“在[object own]方法中用同一类型的另一个对象替换一个self对象是否安全”;2)它使用不同类型的对象,而不仅仅是使用同一类型的对象;3)它的工作方式与amirouche所希望的不完全一样:不能像Class(args)那样初始化类,只能Class()(我不是专业人士,不能回答为什么会这样)。

相关问题 更多 >

    热门问题