Static class properties (read-only)

G

Greg Brunet

In puzzling over classes, I'm wondering if classes can have read-only
static properties? I certainly seem to be able to do create static
properties like this:

class C(object):
count = 0

def __init__(self,s):
C.count += 1
self.Name = s

def __del__(self):
C.count -= 1

and C.count should have a count of the number of its instances that have
been created. However, someone could set the value directly. I know
that using get/set methods, I can make a read-only property at the
object/instance level. Can this be done at the class level? Thanks,
 
A

Aahz

In puzzling over classes, I'm wondering if classes can have read-only
static properties? I certainly seem to be able to do create static
properties like this:

class C(object):
count = 0

def __init__(self,s):
C.count += 1
self.Name = s

def __del__(self):
C.count -= 1

and C.count should have a count of the number of its instances that have
been created. However, someone could set the value directly. I know
that using get/set methods, I can make a read-only property at the
object/instance level. Can this be done at the class level? Thanks,

Nope. Gotta do a metaclass. <evil grin>
 
T

Terry Reedy

Greg Brunet said:
In puzzling over classes, I'm wondering if classes can have read-only
static properties? I certainly seem to be able to do create static
properties like this:

class C(object):
count = 0

def __init__(self,s):
C.count += 1
self.Name = sCC

def __del__(self):
C.count -= 1

and C.count should have a count of the number of its instances that have
been created. However, someone could set the value directly.

Prefixing count with a single underscore will tell others that is is
private-- they should not write it and should not depend on being able
to read it in future versions. Prefixing with 2 underscores will
invoke name-mangling, which you need to read about before using.

TJR
 
A

Alex Martelli

Greg said:
In puzzling over classes, I'm wondering if classes can have read-only
static properties? I certainly seem to be able to do create static
properties like this:

class C(object):
count = 0

def __init__(self,s):
C.count += 1
self.Name = s

def __del__(self):
C.count -= 1

and C.count should have a count of the number of its instances that have
been created. However, someone could set the value directly. I know
that using get/set methods, I can make a read-only property at the
object/instance level. Can this be done at the class level? Thanks,

Yes, you can make a class have a read-only property, but you can do this
only by using a custom metaclass. Once you do make it read-only, of
course, nobody can set it, including methods such as __init__ & __del__!-)


Alex
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,734
Messages
2,569,441
Members
44,832
Latest member
GlennSmall

Latest Threads

Top