Protected method in python
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Making a method private in a python subclass
Private Variables and Methods in Python
如何在受保护的Python类中定义一个方法,并且只有子类才能看到它?
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | class BaseType(Model): def __init__(self): Model.__init__(self, self.__defaults()) def __defaults(self): return {'name': {}, 'readonly': {}, 'constraints': {'value': UniqueMap()}, 'cType': {} } cType = property(lambda self: self.getAttribute("cType"), lambda self, data: self.setAttribute('cType', data)) name = property(lambda self: self.getAttribute("name"), lambda self, data: self.setAttribute('name', data)) readonly = property(lambda self: self.getAttribute("readonly"), lambda self, data: self.setAttribute('readonly', data)) constraints = property(lambda self: self.getAttribute("constraints")) def getJsCode(self): pass def getCsCode(self): pass def generateCsCode(self, template=None, constraintMap=None, **kwargs): if not template: template = self.csTemplate if not constraintMap: constraintMap = {} atts ="" constraintMap.update(constraintMap) for element in self.getNoneEmptyAttributes(): if not AbstractType.constraintMap.has_key(element[0].lower()): continue attTemplate = Template(AbstractType.constraintMap[element[0].lower()]['cs']) attValue = str(element[1]['value']) atts +="%s " % attTemplate.substitute({'value': attValue}) kwargs.update(dict(attributes=atts)) return template.substitute(kwargs) class MainClass(BaseType, Model): def __init__(self): #Only Model will initialize Model.__init__(self, self.__defaults()) BaseType.__init__(self) def __defaults(self): return {'name': {}, 'fields': {'value': UniqueMap()}, 'innerClass': {'value': UniqueMap()}, 'types': {} } fields = property(lambda self: self.getAttribute("fields")) innerClass = property(lambda self: self.getAttribute("innerClass")) types = property(lambda self: self.getAttribute("types")) @staticmethod def isType(iType): # return type(widget) in WidgetSelector.widgets.itervalues() return isinstance(iType, AbstractType) def addType(self, type): if not MainClass.isType(type): raise Exception,"Unknown widget type %s" % type self.types[type.name] = type |
我只想知道
Python不支持C++///C/爪哇的访问保护。一切都是公开的。格言是,"我们都是成年人在这里。"记录你的课程,坚持让你的合作者阅读并遵循文档。
python的文化是,以下划线开头的名称意味着"除非您真的知道应该这样做,否则不要使用这些下划线。"您可以选择以下划线开头"受保护"的方法。但请记住,这只是一个约定,它不会改变方法的访问方式。
以双下划线(
最好的策略是习惯于一个模型,在这个模型中,一个流程中的所有代码都必须被写下来才能共存。
不能。python故意不支持访问控制。按照惯例,以下划线开头的方法是私有的,您应该在文档中清楚地说明应该使用该方法的人。