Idea to support public/private.

Brian Allen Vanderburg II BrianVanderburg2 at aim.com
Thu Jan 22 17:16:13 EST 2009


There was a small error in setprivate/getprivate:



import sys
import inspect

def get_private_codes(class_):
    codes = []
    for i in class_.__dict__:
        value = class_.__dict__[i]
        if inspect.isfunction(value):
            codes.append(value.func_code)
    return codes

def get_protected_codes(class_, codes=None):
    if codes is None:
        codes = []

    for i in class_.__bases__:
        get_protected_codes(i, codes)

    for i in class_.__dict__:
        value = class_.__dict__[i]
        if inspect.isfunction(value):
            codes.append(value.func_code)
    return codes


class Test(object):
    def __init__(self):
        self.protected = 45
        self.private = 34


    def setprotected(self, value):
        frame = sys._getframe(1)
        if frame.f_code in get_protected_codes(self.__class__):
            self.__protect_value_ZR20 = value
        else:
            raise "Protected Write Error"

    def getprotected(self):
        frame = sys._getframe(1)
        if frame.f_code in get_protected_codes(self.__class__):
            return self.__protect_value_ZR20
        else:
            raise "Protected Read Error"

    protected = property(getprotected, setprotected)

    def setprivate(self, value):
        frame = sys._getframe(1)
        if frame.f_code in get_private_codes(Test):
            self.__private_value_ZR20 = value
        else:
            raise "Private Write Error"

    def getprivate(self):
        frame = sys._getframe(1)
        if frame.f_code in get_private_codes(Test):
            return self.__private_value_ZR20
        else:
            raise "Private Read Error"

    private = property(getprivate, setprivate)

class Test2(Test):
    def __init__(self):
        self.protected = 1
        self.private = 1

a=Test()
b=Test2()
#print a.private
#a.private = 1
#print a.protected
#a.protected = 1





More information about the Python-list mailing list