Flask系列一

本文是Flask系列讲座的第一部分,主要探讨了Flask框架中current_app的实现原理,以及Python中类属性、实例属性、类变量、实例变量、属性与__dict__、getattr和setattr函数等概念。通过对官方文档中的例子分析,揭示了Python类和对象的内部工作机制,为后续的Flask教程奠定了基础。
摘要由CSDN通过智能技术生成

    阅读实际使用的开源项目如flask,对于提高编程能力有巨大好处。flask是实现网站功能,使用数据库的一个编程框架,已有中文出版有关书籍介绍。本系列讲座涉及的是非常精彩的The Flask Mega-Tutorial,开始于2017年12月6日开始,结束于2018年5月结束,每周一课。

    对于一个不太大,但足够复杂的app的代理current_app的实现方法,本系列讲座进行彻底分析,分析过程像美食家需要慢慢品味精美大餐,以体会高明厨师的精巧设计和制作。本系列首先比较各种看起来像“属性”的东西,提示一下不常用的方法,相当于在吃主餐前,品尝精美餐前小吃。

 

系列一

餐前小吃(1),本文涉及

类属性与实例属性

类变量,实例变量

属性与__dict__

getattr、setattr函数

并不对称的__getattr__与__setattr__(flask要用)

如果已非常了解object.__setattr__(self, name, value),直接跳过。

 

1、类属性与实例属性

属性是指下例格式

对象名.属性名

的所表示的对象,这个对象是指整个“对象名.属性名”所表示的对象,而不是其中对象名所表示的对象。根据对象名的不同,属性分为两类:

        对象名是类的名称,表示类属性。例如如果A是一个类,则A.a是类属性。

        对象名是实例的名称,表示实例属性。例如如果x是A的实例,则x.a是实例属性。

类属性的值:可以被此类的实例属性所共享,所以类属性的值是共享的。

实例属性的值:如果实例属性的值不是由共享而来,而是自己创建的,这个值是此实例专有的。修改实例属性,实际是创建了一个新对象,所以也是专有的。

下例程序中创建了一个类属性,就被实例属性所共享,但是一个实例属性的值被更改,不管原来是否共享而来,等价于新创建了一个对象,这是专有的。

>>>class A:
...   
pass
...
>>>x = A()
>>>y = A()
>>>A.a =
'我是类属性'  #创建类属性,会被共享
>>>x.a                 #将共享类属性
'我是类属性'
>>>y.a                 #将共享类属性
'我是类属性'
>>>x.a = '创建x的新属性' #更改属性等于新创, 创建专有属性,
>>>A.a
'我是类属性'
>>>x.a
'创建x的新属性'
>>>y.a
'我是类属性'

这里共享是指就是同一个,使用is可以清楚的看到:

>>>x.a is A.a
False
>>>y.a is A.a
True

 

2、类变量,实例变量

属性的值也可以由定义在类中的类变量和实例变量所确定。

实例变量与类变量均在类中创建。实例变量在类的__init__方法中创建,并作为self的属性,所以仅属于self。类变量在方法外创建,一般位于类定义的开始部分,可以为此类的所有实例所共享。类变量创建后,可以在类中访问,但在类中定义的方法除外。在类中定义的函数中,使用self的属性来共享类变量。

类定义后(python扫描完类后),类变量就可以用类属性访问。

类的实例创建后,实例变量可以用实例属性作为self进行访问。

由于实例属性可以共享类属性,所以类变量也可以被实例属性共享。

下面是来自于官方文件

https://docs.python.org/3.6/tutorial/classes.html?highlight=class%20instance%20variables#class-and-instance-variables

的例子,包含了实例变量与类变量,其中get_kind,get_n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值