这对我有用:

class Transform(object):

def __getattribute__(self, name):

if name in attrKeys:

return externalData[name]

return super(Transform, self).__getattribute__(name)

def __setattr__(self, name, value):

if name in attrKeys:

externalData[name] = value

else:

super(Transform, self).__setattr__(name, value)

但是,我不确定这是否是一条好路.

如果外部操作很耗时(例如,您正在使用它来掩盖对数据库或配置文件的访问),则可能给代码用户带来有关成本的错误印象.在这种情况下,您应该使用一种方法,以便用户了解他们正在发起操作,而不仅仅是查看数据.

OTOH如果访问速度很快,请注意不要破坏您的类的封装.如果您这样做是为了获取Maya场景数据(pymel样式,或如this example),则没什么大不了的,因为或多或少可以保证时间成本和数据稳定性.但是,您希望避免在发布的示例代码中出现这种情况:可以很容易地假设将’translateX’设置为给定值将保持不变,实际上,有很多方法可以将其中的内容外部变量可能会引起混乱,从而使您无法在使用该类时知道不变量.如果该类旨在用于一次性使用(例如,它的语法糖用于在没有其他操作正在运行的as循环内进行许多快速重复处理),则可以避免使用它-否则,请将数据内部化到实例中.

最后一个问题:如果您有“很多课程”,那么您还必须做很多样板工作才能完成这项工作.如果要包装Maya场景数据,请阅读描述符(here’s a great 5-minute video).您可以包装典型的转换属性,例如,如下所示:

import maya.cmds as cmds

class MayaProperty(object):

'''

in a real implmentation you'd want to support different value types,

etc by storing flags appropriate to different commands....

'''

def __init__(self, cmd, flag):

self.Command = cmd

self.Flag = flag

def __get__(self, obj, objtype):

return self.Command(obj, **{'q':True, self.Flag:True} )

def __set__(self, obj, value):

self.Command(obj, **{ self.Flag:value})

class XformWrapper(object):

def __init__(self, obj):

self.Object = obj

def __repr__(self):

return self.Object # so that the command will work on the string name of the object

translation = MayaProperty(cmds.xform, 'translation')

rotation = MayaProperty(cmds.xform, 'rotation')

scale = MayaProperty(cmds.xform, 'scale')

在实际代码中,您需要错误处理和更简洁的配置,但是您明白了.

上面链接的示例讨论了在要配置的属性描述符很多时使用元类填充类的情况,如果您不想担心所有的样板,这是一个不错的选择(尽管这样做确实会耗费很小的启动时间) -我认为这是臭名昭著的Pymel启动搜寻的原因之一…)

python setattr 代码可读性_Python-用super重新实现__setattr__相关推荐

  1. python setattr 代码可读性_python __setattr__、__getattr__、__getattribute__全面详解

    一.属性引用函数 hasattr(obj,name[,default]) getattr(obj,name) setattr(obj,name,value) delattr(obj,name) 二.属 ...

  2. python之代码可读性浅谈

    python基础回顾--代码可读性解析篇 前言 在学习了一门编程语言之后,往往大部分人会急于使用代码实现自己的一些功能进行测试自己的学习情况,这是好的,但是在实际使用中代码却往往不是只给自己看的,或者 ...

  3. python 的代码格式_python代码格式

    笨办法学 Python · 续 中文版 笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF ...

  4. python工程代码语法_python编码环境安装与基本语法

    一.pycharm的基本使用 1.python以及pycharm的安装 python的版本选择:3.x版本就行 pycharm的版本选择:社区版就够用 pycharm只是一个编写工具,python才是 ...

  5. python手机代码编辑器_Python怎么打开代码编辑器

    Python作为近几年来最为优秀的编程语言之一,受到了很多程序员的追捧,现在我教大家如何打开Python的代码编辑器 工具/原料 电脑 Python 方法/步骤 1 首先,点击[开始]按钮,开始按钮几 ...

  6. python函数能否增强代码可读性_python——初识函数

    一.初识函数定义与调用 #函数定义 defmylen():"""计算s1的长度"""s1= "hello world"l ...

  7. python初学者代码示例_python入门(非常详细的教程)

    对于初学者而言,您要做的只是专注于Python语言,阐明学习重点,掌握学习节奏,并逐步学习.根据我多年的学习和工作经验,编程语言的学习分为以下三个步骤,无论您是否具有编程基础,都可以通过比较来完成. ...

  8. python运行代码示例_python程序样例

    <Python和HDF 5大数据应用>--2.2 设置 本节书摘来自异步社区<Python和HDF 5大数据应用>一书中的第2章,第2.2节,作者[美]Andrew Colle ...

  9. python语言特点可读性_python语言的特点是什么?python语言好学吗?

    我们在接触到一种新的事物或者是一项新的工作的时候,都会习惯性的发出一种疑问,这个东西好学吗?其实对于我们来说没有什么东西是难学或者是好学的,只要你认真学,认真去了解,它就会感觉简单. python语言 ...

最新文章

  1. Streamr助你掌控自己的数据(2)——三种整合数据至Streamr的典型场景
  2. python求n项多项式的和_Python:创建n次多项式
  3. Android学习笔记——数据库
  4. sgu 240 Runaway (spfa)
  5. 23种设计模式之建造者模式
  6. poj 3680 Intervals
  7. linux笔记本设置休眠
  8. 参考阿里规范,优秀的 Java 项目代码该如何分层?
  9. 转:iris数据集及简介
  10. 大一上学期高数期中复习 高数叔复习笔记
  11. html背景图片自适应屏幕
  12. 高速服务器充电桩位置,最全高速服务区充电站汇总,再也不担心过年回家趴半路啦!...
  13. 背景建模之高斯混合模型
  14. 音创ktv点歌linux系统下载,音创ktv点歌系统
  15. 红蜘蛛10013端口被占用
  16. 领域驱动架构(DDD)建模中的模型到底是什么? 1
  17. 大数据相关技术入门(基于CentOS7)
  18. URIError: URI malformed
  19. 九张图读懂大数据医疗
  20. java 回车判断_java 判断输入回车符

热门文章

  1. Linux一切皆文件
  2. 固定资产资本化日期-转
  3. 爬取糗事百科上的照片
  4. LeetCode力扣刷题数据库(178):分数排名
  5. 如何写出美的程序 --《编程修养》-- 总结与读后感
  6. etcd-03 _ etcdctl:客户端操作 etcd 服务端的工具
  7. DAY106 - 路飞学城(三)- 路飞学城之登录
  8. linux搭建es集群
  9. 黑白棋子c语言思路,最近无聊在写奥赛罗(黑白棋),求关于落棋可行判定的思路...
  10. PAT | 1011 A+B 和 C(分数 15)