python的__init__、__dict__以及类变量和对象变量的关系
2017-01-06 00:00
477 查看
1,__init__的显示与隐式调用,见例子:
未显示声明__init__的情况下,通过类实例化的字典赋值方式,可以隐式创建__init__函数
2,类和对象各维护一个字典__dict__,查询的时候,先查询对象,再查对象,最后查超类,所以,对象可以调用类的变量,但是类不能调用对象的变量。见下面的例子:
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
#要解决以上问题,首先得清晰何时类才有了类变量,实例有了实例变量?
#其次要深入理解类变量的作用,实例变量存在的范围和谁相关!
#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__函数
2,类和对象各维护一个字典__dict__,查询的时候,先查询对象,再查对象,最后查超类,所以,对象可以调用类的变量,但是类不能调用对象的变量。见下面的例子:
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
#要解决以上问题,首先得清晰何时类才有了类变量,实例有了实例变量?
#其次要深入理解类变量的作用,实例变量存在的范围和谁相关!
相关文章推荐
- python-__init__.py 与模块对象的关系
- Python 面向对象中的__init__、__new__以及super()
- python 类变量和对象变量的区别联系-----类的基础(二)
- python学习(九)python中的变量、引用和对象的关系
- python的类变量与实例变量以及__dict__属性
- python的类变量与实例变量以及__dict__属性
- 笨方法学python习题45(对象、类以及从属关系)
- python的类变量与实例变量以及__dict__属性
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- 【python】类变量和对象变量
- python的类变量与实例变量以及__dict__属性
- 笨方法学Python 习题 42: 对象、类、以及从属关系
- python知识整理--议可变对象和不可变对象以及str、list、tuple、dict、set
- python的类变量与实例变量以及__dict__属性
- python对象、引用、全局变量和局部变量的关系
- Python __init__ 构造函数生成对象时调用关系
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- 笨方法学习Python-习题45: 对象、类、以及从属关系
- MFC类的组织(类之间的关系)与WinMain函数、theAPP、构造函数、以及全局变量(对象)之间的关系
- python中类变量和实例变量__之类对象属性(类变量和函数)