berendeanicolae
berendeanicolae

Reputation: 100

Access another child class from parent

I have the code:

class Class1(object):
    class Class2:
        var1 = value1

    class Class3:
        var1 = Class2.var1 + value2

How can I access in Class3 the value I want from Class2?

Upvotes: 0

Views: 99

Answers (2)

Reut Sharabani
Reut Sharabani

Reputation: 31339

You can delay the computation by defining @classproperty:

class classproperty(object):
    def __init__(self, f):
        self.f = f
    def __get__(self, obj, owner):
        return self.f(owner)

Now all you need is this:

class Class1(object):
    class Class2:
        var1 = 1
    class Class3:
        @classproperty
        def var1(cls):
            return Class1.Class2.var1 + 1

Some output:

>>> Class1.Class3.var1
2
>>> Class1.Class2.var1 = 3
>>> Class1.Class3.var1
4

Upvotes: 1

shaktimaan
shaktimaan

Reputation: 1857

You can use @classmethod's to access class variables without instantiating the class

In [17]: class Class1(object):
    class Class2:
        @classmethod
        def setvar(cls,value):
            cls.var1 = value
    class Class3:
        @classmethod
        def setvar(cls, value):
            cls.var1= value
    @classmethod
    def c2var(cls, val):
        cls.Class2.setvar(val)
    @classmethod
    def c3var(cls, val):
        cls.Class3.setvar(val + cls.Class2.var)


In [18]: Class1.c2var(5)

In [19]: Class1.c3var(9)

In [20]: Class1.Class2.var1
Out[20]: 5

In [21]: Class1.Class3.var1
Out[21]: 14

Upvotes: 2

Related Questions