1,__init__的顯示與隱式調用,見例子:python
#encoding=utf8 from sqlalchemy import Column, Integer, String, DateTime, Boolean from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker,scoped_session engine = create_engine("mysql+mysqldb://root:Wan0926@127.0.0.1:3306/test1", max_overflow=5,encoding="utf8") Base=declarative_base() db_session=scoped_session(sessionmaker(bind=engine)) def create_all(): Base.metadata.create_all(bind=engine)#建立數據庫 def drop_all(): Base.metadata.drop_all(bind=engine) class ceshi(Base): __tablename__ = 'ceshi' user_id = Column(Integer, primary_key=True) ceshiid=Column(Integer) @classmethod def new(cls,user_id,ceshiid): """ add new user """ user = ceshi(user_id,ceshiid) db_session.add(user) try: db_session.commit() except: db_session.rollback() db_session.close() #create_all()#建立表 # # ceshi.new(1,2) # ceshi.new(2,3) a=ceshi(user_id=1,ceshiid=2)#這是隱式構造__init__函數 print ceshi.__dict__ print a.__dict__#結果是{'ceshiid': 2, '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x7f010c45a990>, 'user_id': 1}
未顯示聲明__init__的狀況下,經過類實例化的字典賦值方式,能夠隱式建立__init__函數mysql
2,類和對象各維護一個字典__dict__,查詢的時候,先查詢對象,再查對象,最後查超類,因此,對象能夠調用類的變量,可是類不能調用對象的變量。見下面的例子:sql
class aa:
w = 10
def __init__(self):
self.x = 11
self.y = 12
def add(self):
return self.x + self.y
a = aa()
print a.add()
#下邊兩條指令各起何做用?結果是輸出兩個 20 麼?仍是兩個13?仍是?
aa.w = 20
a.w = 13
print aa.w, a.w
#程序繼續增長以下,怎樣理解這t和q呢?他們是___變量
a.t = 14
a.q = 15
print a.t, a.q
#程序繼續增長以下,怎樣理解這m和n呢?他們是___變量
aa.m = 30
aa.n = 40
print aa.m, aa.n
#好了再來個提高吧
#程序繼續增長,下列三個print語句都能正確執行麼?爲什麼?
b = aa()
print b.x,b.y
print b.t,b.q
print b.m,b.n
#要解決以上問題,首先得清晰什麼時候類纔有了類變量,實例有了實例變量?
#其次要深刻理解類變量的做用,實例變量存在的範圍和誰相關!數據庫