我是python新手(一周前开始),这是我第一次编写代码,所以我不能理解相当简单的事情。你知道吗
你能给我解释一下这个函数吗?我知道一个函数是用2个需要输入的self和我的\u对象定义的,但是接下来会发生什么呢?请向新手解释一下。你知道吗
class chain():
def __init__(self, my_object):
self.o = my_object
def __getattr__(self, attr):
x = getattr(self.o, attr)
if hasattr(x, '__call__'):
method = x
return lambda *args: self if method(*args) is None else method(*args)
else:
prop = x
return prop
首先,
chain
不是一个函数,而是一个类。你知道吗简单来说,类就是对象的定义。(说汽车)
现在,类的
__init__
函数只定义了“在它里面”的内容,也就是说它有什么变量或属性。比如说一个类Car
:所以这里的等级车有速度和颜色作为变量(或属性或属性)
现在有一些方法,简单的函数控制对象的行为和它的功能。你知道吗
现在你有一个神奇的方法,
__getattr__
假设一个场景,你想访问汽车的品牌,现在你还没有在它的
__init__
函数中定义self.brand
,所以当你调用它时会得到一个错误,比如:现在,在调用对象的未定义属性或put simple时删除此错误,我们告诉类如果调用未定义的变量,我们将使用方法
__getattr__
。你知道吗在上面的代码中,
does_not_exist
属性(attribute)没有定义,但是我们仍然没有得到错误,因为getattr捕捉到它并按照指示执行。在本例中,它捕获attr
将其资本化并返回它,而不是在您面前抛出错误。你知道吗类
chain
在其构造函数中接受名为my_object
的变量,并将其分配给实例属性self.o
__getattr__
方法是一种特殊的魔术方法,它被重写以将调用委托给我们第一次收到的my_object
变量。你知道吗然后测试委托调用的返回值是否有方法
__call__
。如果是,则调用该方法并返回值。如果它没有它只是返回那个东西。你知道吗相关问题 更多 >
编程相关推荐