Mic*_*ael 7 python attributes class
class Controller:
def __init__(self):
self.__whiteList = self.readFile('whiteList.txt')
a = 0 # Breakpoint
def getWhiteList(self):
return self.__whiteList
Run Code Online (Sandbox Code Playgroud)
好吧,我给了一个断点a = 0.
当我在断点处停下来时,我想评估一下__whiteList.
错误是:
AttributeError:'Controller' object has no attribute '__whiteList'
Run Code Online (Sandbox Code Playgroud)
嗯,这对我来说是一个谜.因为我有getter方法并且在课外,它完美地工作.
好吧,你可以告诉我,我可以很容易地不注意它,因为它在课外工作.但是在调试过程中我需要它.
你能评论为什么我不能在断点处抓住价值吗?
当您使用双下划线为属性名称添加前缀时,Python会通过放置它来"破坏"该名称_<classname>.这意味着你需要这样做:
def getWhiteList(self):
return self._Controller__whiteList
Run Code Online (Sandbox Code Playgroud)
为了访问该__whiteList属性.
但它看起来并不像你应该首先使用它__.您可能只想删除它并whiteList直接访问:
def __init__(self):
self.whiteList = self.readFile('whiteList.txt')
a = 0 # Breakpoint
def getWhiteList(self):
return self.whiteList
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用单个下划线:
def __init__(self):
self._whiteList = self.readFile('whiteList.txt')
a = 0 # Breakpoint
def getWhiteList(self):
return self._whiteList
Run Code Online (Sandbox Code Playgroud)
这会发出一条明确的消息,即_whiteList属性是内部属性,在正常情况下不应直接从类外部访问.
此外,如果您决定使用这些方法中的任何一种,那么您的getWhiteList方法实际上没有任何意义,因为您可以whiteList直接访问该属性.我会删除它.您通常希望避免使用Python中的getter和setter,因为99%的时间它们什么也不做,只会使类定义混乱.
| 归档时间: |
|
| 查看次数: |
2036 次 |
| 最近记录: |