我正在编写一个类来将用户插入到数据库中,在我走得太远之前,我只想确保我的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()
这是正确的做法吗? 我应该声明类变量吗? 我应该在所有类变量前面使用_来使它们变为私有吗?
感谢您提供帮助。
答案 0 :(得分:21)
答案 1 :(得分:7)
答案 2 :(得分:3)
该代码中没有类变量,只有实例属性。并使用properties而不是访问者。并在初始值设定项中创建实例属性,最好是传入的值:
class User(object):
def __init__(self, name, password='!!'):
self.name = name
self.password = password
...
答案 3 :(得分:2)
其他人已经指出:如果在获取/设置属性时不需要执行其他逻辑,请避免使用setter和getter并使用简单的属性访问。 如果确实需要额外的逻辑,那么使用属性。
如果要将许多参数传递给实例初始值设定项,请考虑使用包含所有参数的单独对象或字典:
>>> class User(object):
... def __init__(self, params):
... self.__dict__.update(params)
...
>>> params = {
... 'username': 'john',
... 'password': 'linebreak',
... }
>>> user = User(params)
>>> user.username
'john'
>>> user.password
'linebreak'
P.S。在您的情况下,您不需要在类级别声明属性。 如果你想在所有类实例中共享相同的值,通常会这样做:
>>> class User(object):
... type = 'superuser'
...
>>> user = User()
>>> user2 = User()
>>>
>>> user.type
'superuser'
>>> user2.type
'superuser'
>>>
>>> user2.type = 'instance superuser'
>>>
>>> user.type
'superuser'
>>> user2.type
'instance superuser'
>>> User.type
'superuser'