The following code will print a message only once:
class PrintOnce:
printOnce = True
def __init__(self):
if PrintOnce.print Once:
print 'Printing once.'
PrintOnce.print Once = False
first = PrintOnce()
second = PrintOnce()
The following code will do the same thing for a nested class:
class Outer:
class Inner:
printOnce = True
def __init__(self):
if Outer.Inner.pri ntOnce:
print 'Printing once.'
Outer.Inner.pri ntOnce = False
def __init__(self):
first = Outer.Inner()
second = Outer.Inner()
outer = Outer()
However the following code, which has a private nested class, does not
work:
class Public:
class __Private:
printOnce = True
def __init__(self):
print 'Creating a __Private instance'
if Public.__Privat e.printOnce:
print 'Printing once.'
Public.__Privat e.printOnce = False
def __init__(self):
print 'Creating a Public instance'
first = Public.__Privat e()
second = Public.__Privat e()
public = Public()
Attempting to run the code will produce this error:
AttributeError: class Public has no attribute '_Private__Priv ate'
What can be done so that this private nested class can have the same
functionality as the public nested class?
class PrintOnce:
printOnce = True
def __init__(self):
if PrintOnce.print Once:
print 'Printing once.'
PrintOnce.print Once = False
first = PrintOnce()
second = PrintOnce()
The following code will do the same thing for a nested class:
class Outer:
class Inner:
printOnce = True
def __init__(self):
if Outer.Inner.pri ntOnce:
print 'Printing once.'
Outer.Inner.pri ntOnce = False
def __init__(self):
first = Outer.Inner()
second = Outer.Inner()
outer = Outer()
However the following code, which has a private nested class, does not
work:
class Public:
class __Private:
printOnce = True
def __init__(self):
print 'Creating a __Private instance'
if Public.__Privat e.printOnce:
print 'Printing once.'
Public.__Privat e.printOnce = False
def __init__(self):
print 'Creating a Public instance'
first = Public.__Privat e()
second = Public.__Privat e()
public = Public()
Attempting to run the code will produce this error:
AttributeError: class Public has no attribute '_Private__Priv ate'
What can be done so that this private nested class can have the same
functionality as the public nested class?
Comment