- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想创建一个类组合,以便组合类的实例变量成为组合的实例变量,但名称经过调整。
这方面的应用是在 matplotlib 中定义用于绘图的新对象。一个示例是,我想要一个函数 drawMyArrow
,它可以为箭头的头部、尾部和弧线绘制一个可能具有不同颜色(和其他规范)的箭头。我希望能够通过 drawMyArrow
中的关键字参数传递头部、尾部和圆弧的各种规范。我以前没有使用过类,但是在网上阅读这个,我相信解决我的问题的最好方法是定义一个类 MyArrow
,它是一些类 ArrowHead 的组合
和 ArrowArc
。
为了说明我的问题,考虑一个简单的玩具示例。让我们定义一个类 Room
,它由类 wall
、window
和 door
组成。
class Door:
def __init__(self, color='white', height=2.3, width=1.0):
self.color = color
self.height = height
self.width = width
class Window:
def __init__(self, color='white', height=1.0, width=0.8):
self.color = color
self.height = height
self.width = width
class Wall:
def __init__(self, color='white', height=2.5, width=4.0):
self.color = color
self.height = height
self.width = width
class Room:
def __init__(self):
self.door = Door()
self.window = Window()
self.wall = Wall()
Door
、Window
、Wall
的实例变量分别是color
、height
,宽度
。我希望 Room
具有实例变量 doorcolor
、windowcolor
、wallcolor
、doorheight
, windowheight
等。我可以将所有九个实例变量显式添加到 Room
并定义 set
和 get
函数他们。但是,如果我后来决定向 Door
、Window
或 Wall
添加更多实例变量,我将始终需要编辑 的代码房间
也是。有没有办法对 Room
进行编码,使其自动采用(并重命名)其组件类中的实例变量?
最佳答案
您正在使用组合——无需为您的成员复制访问器。您可以通过您的组合成员轻松访问属性:
r = Room()
print( r.window.color ) # to print the windows color only
不过,您可能会从“零件”的基类和 Room
类的更改后的 __init__(..)
中获益:
class Thing:
"""Base class handling init including a name and __str__ and __repr__."""
def __init__(self, name, color, height, width):
self.name = name
self.color = color
self.height = height
self.width = width
def __str__(self):
return repr(self)
def __repr__(self):
return str([self.name, self.color, self.height, self.width])
class Door(Thing):
def __init__(self, color='white', height=2.3, width=1.0):
super(self.__class__, self).__init__(self.__class__.__name__, color, height, width)
class Window(Thing):
def __init__(self, color='white', height=2.3, width=1.0):
super(self.__class__, self).__init__(self.__class__.__name__, color, height, width)
class Wall(Thing):
def __init__(self, color='white', height=2.5, width=4.0):
super(self.__class__, self).__init__(self.__class__.__name__, color, height, width)
class Room:
def __init__(self,*, door=None, window=None, wall=None): # named params only
self.door = door or Door() # default to booring Door if none provided
self.window = window or Window() # same for Window
self.wall = wall or Wall() # same for Wall
def __str__(self):
return str([self.door,self.window,self.wall])
创建对象并打印它们:
r = Room()
r2 = Room(window=Window("yellow"))
print(r)
print(r2)
r3 = Room( window=Window("green",0.5,0.5), door=Door("black",5,5),
wall=Wall("unicorncolored",5,5) )
print(r3)
输出:
# r - the cheap Room - using default-ing Things
[['Door', 'white', 2.3, 1.0], ['Window', 'white', 2.3, 1.0], ['Wall', 'white', 2.5, 4.0]]
# r2 - with a custom yellow Window
[['Door', 'white', 2.3, 1.0], ['Window', 'yellow', 2.3, 1.0], ['Wall', 'white', 2.5, 4.0]]
# r3 - all custom -
[['Door', 'black', 5, 5], ['Window', 'green', 0.5, 0.5], ['Wall', 'unicorncolored', 5, 5]]
关于python - 管理(和重命名)类组合的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611325/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。 我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很
我已经开始了一个新元素的工作,并决定给 Foundation 5 一个 bash,看看它是什么样的。在创建带有水平字段的表单时,我在文档中注意到的第一件事是它们使用大量 div 来设置样式。所以我在下
我有一个 Windows 窗体用户控件,其中包含一个使用 BeginInvoke 委托(delegate)调用从单独线程更新的第 3 方图像显示控件。 在繁重的 CPU 负载下,UI 会锁定。当我附加
我有一堆严重依赖dom元素的JS代码。我目前使用的测试解决方案依赖于 Selenium ,但 AFAIK 无法正确评估 js 错误(addScript 错误不会导致您的测试失败,而 getEval 会
我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个
考虑到以下情况,我是前端初学者: 某个 HTML 页面应该包含一个沉重的图像(例如 - 动画 gif),但我不想强制客户缓慢地等待它完全下载才能享受一个漂亮的页面,而是我更愿意给他看一个轻量级图像(例
我正在设计一个小软件,其中包括: 在互联网上获取资源, 一些用户交互(资源的快速编辑), 一些处理。 我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能
我想比较两个理论场景。为了问题的目的,我简化了案例。但基本上它是您典型的生产者消费者场景。 (我关注的是消费者)。 我有一个很大的Queue dataQueue我必须将其传输给多个客户端。 那么让我们
我有一个二元分类问题,标签 0 和 1(少数)存在巨大不平衡。由于测试集带有标签 1 的行太少,因此我将训练测试设置为至少 70-30 或 60-40,因此仍然有重要的观察结果。由于我没有过多地衡量准
我是一名优秀的程序员,十分优秀!