简体   繁体   中英

Create static attribute of class (attribute is instance of that same class)

Let's say I have a class defined as follow :

class Foo():
   baz = None
   def __init__(self, bar):
       self.bar = bar

Now, in that example Foo.baz is None . Now let's say that this class attribute needs to be an instance of Foo like below:

class Foo():
    baz = Foo("baz")
    def __init__(self, bar):
        self.bar = bar

How would I proceed?

Similarly, is there any way to create a "class property". I know I can assign a lambda function returning a new instance of the class to a class attribute, but I'd rather not have to write the parenthesis.

If you want to use the line baz = Foo("baz") inside a class even before defining Foo earlier; it's not possible ie Python will throw a NameError: name 'Foo' is not defined at you, but here's a workaround to achieve what you intend:

class Foo:
   def __init__(self, bar):
       self.bar = bar
Foo.baz=Foo('foo')

Now Foo.baz is an instance of the Foo class and also baz is a class attribute of the Foo class and hence will be inherited by all instances of the class as well:

myFoo = Foo('myFoo')

You can verify that myFoo.baz.bar is infact 'foo' and not 'myFoo'

print(myFoo.bar) 
# myFoo
print(myFoo.baz.bar)
# foo

Also note that this will cause Foo.baz , Foo.baz.baz , Foo.baz.baz.baz etc. all to be a Foo object because Foo.baz has value Foo('foo') ie an object of Foo class and baz is also a class attribute of Foo .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM