假设我们有5个python类X1、X2、X3、X4、X5和以下代码:
class Schedule:
def __init__(self):
pass
class DateBound:
def __init__(self):
self.attr3 = Schedule()
class Behavior:
def __init__(self):
self.attr2 = DateBound()
class Host:
def __init__(self):
self.attr1 = Behavior()
class PeriodController:
def __init__(self):
self.attr0 = Host()
现在假设PeriodController中的函数需要访问类DateBound的attr3:
class PeriodController:
def __init__(self):
self.attr0 = ()
def example_function(self):
return self.attr0.attr1.attr2.attr3
在这种情况下,我如何有效地访问attr3?我并不反对像example\u function()那样访问它,但是它似乎不正确,因为重复了attr0.attr1。。。属性
简而言之,这个实现的概念是一个主机有一个巴哈维奥,它定义了他应该在什么时候连接到服务器。你知道吗
DateBound类是存在的,因为有时主机可以在与正常的行为不同的时间连接到服务器,但它确实是好的主机,因此没有使用DateBound实例指定主机的常规连接时间。你知道吗
已日期的有一个计划,其中包含一个已日期的实例所拥有的时间,因此应该连接主机的时间。 最后,PeriodController根据其正常行为控制主机是否连接,因此PeriodController需要访问自身属性3你知道吗
虽然Ajax打败了我,但我正在开发一个更漂亮的解决方案:
这应该在任何类之外定义。你知道吗
用法: ^在本例中,{}将是
X5()
的实例,differenceInX
将是5-2=3。你知道吗这个方法的好处是,它可以用于任何类,而不必重复定义它。注意,
(any(item.startswith('attr') for item in dir(startObject))[0])
依赖于每个类只有一个以'attr'
开头的属性(在本例中是attr0/1/2/3/n
)。你知道吗可以使用递归:
输出:
打印
X5().attr0.attr1.attr2.attr3)
可获得相同的结果:向每个类中添加
__repr__
方法可以更容易地可视化:输出:
相关问题 更多 >
编程相关推荐