ens*_*are 16 python oop pylons
我正在编写一个类来将用户插入到数据库中,在我走得太远之前,我只想确保我的OO方法是干净的:
class User(object):
def setName(self,name):
#Do sanity checks on name
self._name = name
def setPassword(self,password):
#Check password length > 6 characters
#Encrypt to md5
self._password = password
def commit(self):
#Commit to database
>>u = User()
>>u.setName('Jason Martinez')
>>u.setPassword('linebreak')
>>u.commit()
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?我应该声明类变量吗?我应该在所有类变量前面使用_来使它们变为私有吗?
谢谢你的帮助.
bch*_*rry 21
它通常是正确的,AFAIK,但你可以用属性清理它.
class User(object):
def _setName(self, name=None):
self._name = name
def _getName(self):
return self._name
def _setPassword(self, password):
self._password = password
def _getPassword(self):
return self._password
def commit(self):
pass
name = property(_getName, _setName)
password = property(_getPassword, _setPassword)
>>u = User()
>>u.name = 'Jason Martinez'
>>u.password = 'linebreak'
>>u.commit()
Run Code Online (Sandbox Code Playgroud)
还有一个方便的基于装饰器的语法,文档也解释了这一点.
使用单个_不会使您的属性变为私有:它是一种约定,它告诉它是一个内部属性,在正常情况下不应该被外部代码访问.使用您的代码,它还意味着密码和名称是只读的.
我强烈建议你为你的类使用一个初始化器,它会初始化你的属性,即使是一个默认值,例如None:它会使你在提交方法中更容易,你不必检查是否存在_name和_password属性(使用hasattr).
在代码上使用Pylint.