栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

浓缩pyqtproperties

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浓缩pyqtproperties

有很多方法可以做到:类装饰器,元类和Mixin。

常用助手功能:

def set_pyqtproperties(klass, properties, proxy='user'):    def make_prop(prop):     def property_(self): return getattr(getattr(self, proxy), 'get_' + prop)        property_.__name__ = prop        return property_    if isinstance(properties, basestring):       properties = properties.split()    for prop in properties:         setattr(klass, prop, pyqtProperty(QVariant, make_prop(prop)))

类装饰器

def set_properties(properties):    def decorator(klass):        set_pyqtproperties(klass, properties)        return klass    return decorator

用法

@set_properties("display background")class LightDMUser(QObject): pass

如果不支持类装饰器,则可以尝试:

class LightDMUser(QObject):     passLightDMUser = set_properties("display background")(LightDMUser)

元类

def set_properties_meta(properties):    def meta(name, bases, attrs):        cls = type(name, bases, attrs)        set_pyqtproperties(cls, properties)        return cls    return meta

用法

class LightDMUser(QObject):    __metaclass__ =  set_properties_meta("display background")

注意:如果将属性列表设置为类属性,则可以重用同一元类:

def metaClass(name, bases, attrs):    cls = type(name, bases, attrs)    set_pyqtproperties(cls, attrs.get('properties', ''))    return clsclass LightDMUser(QObject):    properties = "display background"    __metaclass__ = metaClass

另外,您可以

attrs
直接
attrs[name] = value
进行操作:在调用之前
type()
代替
setattr(cls, name,value)

以上假设

QObject.__class__ is type

混合蛋白

def properties_mixin(classname, properties):    #note: create a new class by whatever means necessary    # e.g., even using exec() as namedtuple does    # http://hg.python.org/cpython/file/3.2/Lib/collections.py#l235    # reuse class decorator here    return set_properties(properties)(type(classname, (), {}))

用法

PropertiesMixin = properties_mixin('PropertiesMixin', 'display background')class LightDMUser(PropertiesMixin, QObject): pass

我还没有尝试过。这里的代码显示了实现该功能可能需要的数量和代码种类。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407407.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号