无法理解代码newbi

2024-04-26 15:14:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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

Tags: 函数代码selfreturnifobjectmydef
2条回答

首先,chain不是一个函数,而是一个类。你知道吗

简单来说,类就是对象的定义。(说汽车)

现在,类的__init__函数只定义了“在它里面”的内容,也就是说它有什么变量或属性。比如说一个类Car

class Car:
    def __init__(self,maxspeed,color):
        self.speed = maxspeed #So what's defined under **__init__** is a property of a class.
        self.color = color

所以这里的等级车有速度和颜色作为变量(或属性或属性)

现在有一些方法,简单的函数控制对象的行为和它的功能。你知道吗

class Car:
    def __init__(self,maxspeed,color):
        self.speed = maxspeed #So what's defined under **__init__** is a property of a class.
        self.color = color
    def accelarate(self):   #Method to increase the speed of car object.
        self.sepped = self.speed + 10 

现在你有一个神奇的方法,__getattr__

假设一个场景,你想访问汽车的品牌,现在你还没有在它的__init__函数中定义self.brand,所以当你调用它时会得到一个错误,比如:

>>>red_car = Car(100,red) #Creating an object named red_car of class Car
>>>red_car.color
>>>'red'
>>>red_car.brand
>>> Attribute Error , Class car dosen't has attribute brand

现在,在调用对象的未定义属性或put simple时删除此错误,我们告诉类如果调用未定义的变量,我们将使用方法__getattr__。你知道吗

class Dummy(object):
    def __getattr__(self, attr):
        return attr.upper()

d = Dummy()
d.does_not_exist # 'DOES_NOT_EXIST'
d.what_about_this_one  # 'WHAT_ABOUT_THIS_ONE'

在上面的代码中,does_not_exist属性(attribute)没有定义,但是我们仍然没有得到错误,因为getattr捕捉到它并按照指示执行。在本例中,它捕获attr将其资本化并返回它,而不是在您面前抛出错误。你知道吗

chain在其构造函数中接受名为my_object的变量,并将其分配给实例属性self.o

__getattr__方法是一种特殊的魔术方法,它被重写以将调用委托给我们第一次收到的my_object变量。你知道吗

然后测试委托调用的返回值是否有方法__call__。如果是,则调用该方法并返回值。如果它没有它只是返回那个东西。你知道吗

相关问题 更多 >