免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1873 | 回复: 2
打印 上一主题 下一主题

一个不理解的关于类的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-24 09:43 |只看该作者 |倒序浏览

  1. import time
  2. from lib.dbtools import MySql
  3. class Member():
  4.     __column__ = {  'uid':0,
  5.                     'username':'',
  6.                     'email':'aa@bb.com',
  7.                     'password':'',
  8.                     'birthday':'1970-01-01',
  9.                     'location':'',
  10.                     'regip': '',
  11.                     'regdate':int(time.time()),
  12.                     'lastloginip':'',
  13.                     'lastlogindate':int(time.time()),
  14.                     'status' : 0,
  15.                     'logincount' : 0,
  16.                     'groupid' : -1,
  17.                     'credit' : 0,
  18.                     'gender': 0,
  19.                     'avatar':''
  20.         }
  21.     def __init__(self,db=None):
  22.         self.db = db
  23.         print '*'*10,'__init__','*'*10
  24.         print self.db    #为什么这里为None了
  25.         print '*'*10,'__init__','*'*10

  26.     def __getattr__(self,key):
  27.         key = key.lower().strip()
  28.         if self.__column__.has_key(key):
  29.             return self.__column__[key]

  30.     def __setattr__(self,key,value):
  31.         key = key.lower().strip()
  32.         if self.__column__.has_key(key):
  33.             self.__column__[key] = value
  34.    
  35.     def GetMemberById(self,id):
  36.         print self.db

  37.     def GetMemberByUserName(self,username):
  38.         print self.db

  39.     def Update(self,condition,**kwargs):
  40.         pass

  41.     def Add(self):
  42.         print self.db

  43.     def __repr__(self):
  44.         return '__repr__'
  45.     def __call__(self):
  46.         return 'call'
  47.     def __str__(self):
  48.         return self.username
  49.    


  50. if __name__ == '__main__':
  51.      mysql = MySql(dbhost = 'localhost',dbname='docute',dbuser = 'root',dbpwd='mysql123456')
  52.      mysql.connect()

  53.      print mysql    #这里是有值的
  54.      u = Member(mysql)
  55.      print mysql
复制代码
在Member类的构造函数中将mysql的实例传进去,并赋值给了Member的db变量,
但在Member的__init__方法里,print self.db却是None,这是为什么?

运行截图

论坛徽章:
0
2 [报告]
发表于 2010-06-24 10:45 |只看该作者
self.db = db 的时候调用了__setattr__

而 __setattr__ 只有self.__column__.has_key('db'): 的时候才保存变量值,

而__column__ 这个dict中正好又没有 'db'这个key

所以self.db = db  等于什么事都没做

论坛徽章:
0
3 [报告]
发表于 2010-06-24 11:09 |只看该作者
self.db = db 的时候调用了__setattr__

而 __setattr__ 只有self.__column__.has_key('db'): 的时候才保 ...
gnujava 发表于 2010-06-24 10:45


一语道破。。。
原来是__setattr__了~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP