Python中的多态性与构造函数行为

2024-10-03 13:25:43 发布

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

我在阅读Python中的多个构造函数多态性。我碰到这个code。在

import sys, types, pprint

class Vector:
    """
    Demo of a class with multiple signatures for the constructor
    """
    def __init__(self, *args, **kwargs):

        if len(args) == 1:  foundOneArg = True;  theOnlyArg = args[0]
        else:               foundOneArg = False; theOnlyArg  = None

        if foundOneArg and isinstance(theOnlyArg, types.ListType):      
            self.initializeFromList(theOnlyArg)             
        elif foundOneArg and isinstance(theOnlyArg,Vector):
            self.initializeFromVector(theOnlyArg)           
        else:
            self.initializeFromArgs(*args)

        pprint.pprint(self.values)  # for debugging only

    def initializeFromList(self, argList):
        self.values = [x for x in argList]

    def initializeFromVector(self, vector):
        self.values = [x for x in vector.values]

    def initializeFromArgs(self, *args):
        self.values = [x for x in args]
#------------ end of class definition ---------------------

v = Vector(1,2,3) 
v = Vector([4,5,6]) 
q = Vector(v);

但是,我不明白变量vector.values是如何在initializeFromVector的函数定义中设置的。在

我发现Python解释器如何能够访问vector.values,尽管它不是在程序中手动设置的,我也认为{}是某种内置变量。在

这是可变类的一个例子吗?我一直觉得这种行为很奇怪。在


Tags: ofinselffordefargsclasstypes
1条回答
网友
1楼 · 发布于 2024-10-03 13:25:43

它非常简单,真的:initializeFromVector接受一个vector类型的参数并查找它的values成员。这必须是在构造vector时预先设置的。在

举个简单的例子:

from copy import copy

class Set(object):
    def __init__(self, other=None):
        """Initialize; optionally copy the elements of another Set."""
        self.elements = set()
        if other is not None:
            self.elements = copy(other.elements)

相关问题 更多 >