设置对象实例变量的正确方法

2024-05-04 09:24:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个类来将用户插入数据库,在我做得太深入之前,我只想确保我的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()

这是正确的方法吗? 我应该在上面声明类变量吗? 我应该在所有的类变量前面使用一个使它们私有化吗?

谢谢你的帮助。


Tags: to方法用户nameself数据库objectdef
3条回答

一般来说是正确的,不过你可以用properties来清理它。

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()

还有一个方便的基于decorator的语法,文档也解释了这一点。

使用单个属性不会使您的属性成为私有属性:这是一个约定,告诉您它是一个内部属性,在正常情况下不应该被外部代码访问。使用您的代码也意味着密码和名称是只读的。

我强烈建议为您的类使用初始化器,它将初始化您的属性,即使是一个默认值,如无:它将使您提交方法中的事情更容易,您不必检查是否存在名称和密码属性(使用hasattr)。

在代码上使用Pylint。

代码中没有类变量,只有实例属性。使用properties而不是访问器。并在初始值设定项中创建实例属性,最好是从传入的值中创建:

class User(object):
  def __init__(self, name, password='!!'):
    self.name = name
    self.password = password

  ...

相关问题 更多 >