如何修复替换方法?

2024-05-16 04:29:59 发布

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

class type_name:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self._fields = [x,y]
        self._mutable = False 

     def _replace(self,**kargs ):
        for key, value in kargs.iteritems():
            z = zip(key,value)
        for x in z:
            for y in self.field:
                if x[0] == y:
                    self.x = x[1]
                if x[0] == y:
                    self.y = x[1]

\u replace函数,将**kargs作为参数(关键字args)。这允许在方法中使用名称kargs作为参数名及其匹配参数值的dict。替换方法的语义取决于实例名称self中存储的值。\u mutable:

如果为True,则调用它的对象的实例名称将更改,并且该方法将返回None。所以,如果原点=点(0,0),我们称之为原点。替换(y=5),那么打印(原点)将显示为点(x=0,y=5),因为原点发生了变异。你知道吗

如果为False,则返回同一类的新对象,其实例名的值相同,但在kargs中指定的值除外。因此,如果原点=点(0,0),我们称之为新原点=原点。\替换(y=5),那么打印(原点,新原点)将显示为点(x=0,y=0)点(x=0,y=5),因为原点没有突变

我不知道为什么我的替换功能不起作用,有人能告诉我如何修复它吗?你知道吗

我添加了bsc.txt文件帮助理解:

c-->t1 = Triple1(1,2,3)
c-->t2 = Triple2(1,2,3)
c-->t3 = Triple3(1,2,3)
# Test replace (not mutable)
==-->t1._replace(a=2)-->Triple1(2,2,3)
==-->t1._replace(a=2,c=2)-->Triple1(2,2,2)
^-->t1._replace(a=2,c=2,d=2)-->TypeError
==-->t1-->Triple1(a=1,b=2,c=3)
# Test _replace (mutable)
c-->Triple1 = pnt('Triple1', 'a b c',mutable=True)
c-->t1 = Triple1(1,2,3)
e-->t1._replace(a=2,c=2)-->None
==-->t1-->Triple1(a=2,b=2,c=2)

Tags: 方法keyinself名称falseforvalue
1条回答
网友
1楼 · 发布于 2024-05-16 04:29:59

这类任务有更干净的api。为此使用getattrsetattr。首先需要修复_fields参数。它应该包含名称而不是值。你知道吗

class type_name:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self._fields = ['x', 'y']
        self._mutable = False 

    def _replace(self, **kwargs):
        if self._mutable:
            for key, value in kwargs.iteritems():
                setattr(self, key, value)
        else:
            for field in self._fields:
                if field not in kwargs:
                    kwargs[field] = getattr(self, field)
            return self.__class__(**kwargs)

相关问题 更多 >