可以将其作为数据容器的实例包含一个实例?

问题描述 投票:0回答:4
有可能采取这种行动吗?

是的,一个类可以包含本身的实例,您只是因为他人所描述的原因无法在启动下创建它。

例如,此类会这样做,

class A: def __init__(self,value): self.value=value def setProperty(self,subvalue): self.innerInstance=A(subvalue)

然后,您可以实例化并以这样的方式设置其内部副本:

python class recursion
4个回答
9
投票

验证它可以使用:

>>>OuterInstance.innerInstance.value 456


由于已经给出的原因,这是行不通的:

pypython看到
A(2)

并致电

A.__init__

8
投票
致电

A(val)

.
  1. A(val)
    致电
    A.__init__
    .
  2. goto2
    
    
    我假设您正在这样做,以便您拥有
    val
  3. 的日志;也就是说,如果以后的某个时候,您决定要
  4. val
    3
    ,而不是丢弃原始值
    2
  5. 。怎么样:
  6. 代码
class A( object ): @property def val( self ): return self.history[ -1 ] @val.setter def val( self, value ): self.history.append( value ) def __init__( self, val ): self.history = [ ] self.val = val

解释
A( object )
:现在应该从
object
继承。仅仅是因为,基本上是

@property

:这告诉Python,每次我们要求A.Val时,都应致电A.Val()并返回结果。这是一个decorator

;查找
property
内置功能以获取更多信息。

@val.setter
    :这与上述类似,但告诉Python,每次我们尝试分配给
  • A.val
    时,都应该调用以下功能。它没有设置
    A.val
    ,而是将值附加到历史记录列表中。
    
  • well,您在self中拥有的班级也有自我。我不确定我是否有您在做什么的目的,但是您可能会尝试这样的事情:
    class A:
        def __init__(self, val, copy = True):
            if copy:
                self.a = A(val, False)
            self.val = val
    
        
    
    python类可以包含一个本身的实例。这对于比较和范围检查特别有用。
    
    说,宣布构造函数中的对象将产生无限的递归。它也不会导致类属性,而是在实例属性中。通常会声明class属性
  • Before
  • Init
    class Shoesize:
        min = Shoesize(4)
        max = Shoesize(12)
    
        def __init__(self, size):
            self.size = size
    
    以这种方式对课程进行分配将导致以下错误:
  • NameError: name 'Shoesize' is not defined
python在声明类后可以添加类属性。这是通常用来让班级包含自身成员的方法,如以下常见用例:

1
投票
@total_ordering class Shoesize: def __init__(self, size): self.size = size def __repr__(self): return f"Shoesize({self.size})" def __eq__(self, other): return self.size == other.size def __gt__(self, other): return self.size > other.size Shoesize.min = Shoesize(4) Shoesize.max = Shoesize(12)

可以通过课程访问这些属性:
>>> print(Shoesize.min)
Shoesize(4)

0
投票
通过一个实例:

>>> s = Shoesize(8) >>> print(s, s.max, s < s.max) Shoesize(8) Shoesize(12) True

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.