python 类装饰器的类,举例说明下。。

收藏,1.2k 浏览
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
如何在一个 python 类实例内部得到并使用实例所在的类的名字或者类本身?
sqlalchemy
class Article(db.Model):
__tablename__ = 'articles'
def count(self):
result = db.session
.query(??, Association)
.filter(??.id == Association.article_id)
.filter(??.id = self.id)
return result
?? 这个地方换成 Article 本身,应该使用什么方式得到类的名字??
这段代码如果放在 controller 里面大致是这样:
session.query(Article, Association)
.filter(Article.id == Association.article_id)
.filter(Article.id == 4)
想把他放到 Model 里面
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
self.__class__, self.__class__.__name__
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
如果只是 class 内使用 class 本身,那么可以用 classmethod 方法包装。大概代码如下:
class Article(db.Model):
__tablename__ = 'articles'
@classmethod
def count(cls, id):
result = db.session
.query(cls, Association)
.filter(cls.id == Association.article_id)
.filter(cls.id = id)
return result
没有测试过,题主可以自己测下
同步到新浪微博
分享到微博?
与我们一起探索更多的未知
专业的开发者技术社区,为用户提供多样化的线上知识交流,丰富的线下活动及给力的工作机会
加入只需一步
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要举报该,理由是:
扫扫下载 App
SegmentFault
一起探索更多未知大家正在求推荐
&·&·&·&·&·&·
第三方登录:您现在的位置: >
列表list在中作用很强在,列表可以包含不同类型的数据对像,同时它是一个有序的。所有序列能用到的标准操作方法,列表也都可以使用。比如切片、索引等,python的列表是可变,它支持添加、修改、删除等操作。
创建一个新列表
可以把列表list理解为任意对像的序列,只要把需要的参数值放入到中括号[& ]里面就可以了,就像下面这样操作:
&names = ['ada','amy','ella','sandy']
列表可以包含不同类型对像,也支持嵌套:
例如a = ['a',567,['adc',4,],(1,2)]
这个列表中就包含了字符串、整型、元组这些元素,同时还嵌套了一个列表。
修改列表中的值
列表是有序的,可以通过索引下标来修改特定位置的值。下面用举例说明的方法来介绍下如何修改列表参数:
&&&a = [1,9,9]
&&&a [0] = 9
列表的修改操作,也可以把它看成是特定位置重新赋值的操作。
列表删除操作
列表删除最常用到的方法有三种:del、remove、pop,使用方法和用途也并不相同,这里先了解下del这种最方便的入门级列表删除操作方法。
现有列表 names = ['ada','amy','ella','sandy'],要求是把上面列表中的'amy'删除,思路是:先知道'amy'在列表names中的索引位置,之后配合del这个方法来删除。列表del方法具体使用方法如下:
&&&names = ['ada','amy','ella','sandy']
&&&del names[1]
['ada','ella','sandy']
列表的操作方法还有很多,像是append、count、extend、index、insert、reverse和sort排序等方法,这些会再更之后的文章中做详细讲解。
玩蛇网原创,转载请注明文章出处和来源网址:
玩蛇网Python新手QQ群,欢迎加入: ①
文章发布日期: 15:56
我要分享到:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
相关文章推荐
别人正在看
Python学习与资源分享平台Python的静态方法和类成员方法
Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的:
1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;
2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;
3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法。
实现静态方法和类方法的两种方式
一、在Python 2.3及之前,用staticmethod和classmethod类型对象包装实现
例子如下(注意print里的说明):
class MyClass:
&&& val1 =
__init__(self):
self.val2 = 'Value 2'
staticmd():
print '静态方法,无法访问val1和val2'
staticmethod(staticmd)
classmd(cls):
print '类方法,类:' + str(cls) + ',val1:' + cls.val1 +
',无法访问val2的值'
classmethod(classmd)
= MyClass()
&&&&mc.smd()
&&&&mc.cmd()
&&&&MyClass.smd()
&&&&MyClass.cmd()
二、在Python 2.4及之后,用装饰器(decorators)实现
装饰器使用@操作符,例子如下:
class MyClass:
&&& val1 =
__init__(self):
self.val2 = 'Value 2'
@staticmethod
staticmd():
print '静态方法,无法访问val1和val2'
@classmethod
classmd(cls):
print '类方法,类:' + str(cls) + ',val1:' + cls.val1 +
',无法访问val2的值'
不管是以上两种方式中的哪一种,执行情况都是一样的,以方式二执行结果为例分析如下:
= MyClass() &# 实例化
&&&&mc.staticmd()&&#
实例调用静态方法,无法访问实例变量val1和val2
静态方法,无法访问val1和val2
&&&&mc.classmd()&&#
实例调用类方法,注意,这里访问的是类MyClass的变量val1的值,不是实例化后mc的实例变量val1,这里容易混淆,往下看就会明白。val2一直是实例变量,所以无法访问
类方法,类:__main__.MyClass,val1:Value
1,无法访问val2的值
&&&&MyClass.staticmd()&&#
类直接调用静态方法,结果同上面的实例调用,无论是类变量还是实例变量都无法访问
静态方法,无法访问val1和val2
&&&&MyClass.classmd()&&#
类直接调用类方法,结果同上面的实例调用
类方法,类:__main__.MyClass,val1:Value
1,无法访问val2的值
&&&&mc.val1
= 'Value changed' &# 改变实例变量val1的值
&&&&mc.classmd()&&#
实例调用类方法,注意到cls.val1的值没变,所以,这时的cls.val1是类变量val1,而非实例变量val1
类方法,类:__main__.MyClass,val1:Value
1,无法访问val2的值
&&&&MyClass.classmd()
&# 类直接调用类方法,结果同上面的实例调用
类方法,类:__main__.MyClass,val1:Value
1,无法访问val2的值
&&&&MyClass.val1
= 'Class Value changed'&&#
改变类变量val1的值
&&&&mc.classmd()&&#
实例调用类方法,注意到cls.val1的值变了,所以,进一步证明了这时的cls.val1是类变量val1,而非实例变量val1
类方法,类:__main__.MyClass,val1:Class Value
changed,无法访问val2的值
&&&&MyClass.classmd()&
# 类直接调用类方法,结果同上面的实例调用
类方法,类:__main__.MyClass,val1:Class Value
changed,无法访问val2的值
如果上述执行过程太复杂,记住以下两点就好了:
静态方法:无法访问类属性、实例属性,相当于一个相对独立的方法,跟类其实没什么关系,换个角度来讲,其实就是放在一个类的作用域里的函数而已。
类成员方法:可以访问类属性,无法访问实例属性。上述的变量val1,在类里是类变量,在实例中又是实例变量,所以容易混淆。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 python 类装饰器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信