首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么object.__setattr__.__get__(self,Attribute)用于attrs/_make.py中属性的__init__

object.setattr.get(self, Attribute)用于attrs/_make.py中属性的init,是为了在属性初始化过程中,自动调用__setattr__方法来设置属性的值。

在Python中,对象的属性默认是存储在字典中的,通过__setattr__方法可以自定义属性的设置行为。当我们给一个对象设置属性值时,Python会自动调用该对象的__setattr__方法来进行属性值的设置。

而在attrs库中的_make.py模块中,通过使用object.__setattr____get__方法来重写__init__方法,实现了属性的初始化过程。具体来说,object.__setattr__可以用于设置属性的值,而__get__方法可以用于获取属性的值。

这种做法的优势在于,可以在属性初始化的过程中,通过自定义的方法来对属性值进行处理、校验、转换等操作,以确保属性的合法性和准确性。

在云计算领域中,这种技术可以应用于对象属性的初始化过程,例如在云原生应用开发中,可以通过自定义的属性初始化方法来对云服务的相关参数进行设置和校验,以确保应用在云环境中的正常运行。

推荐的腾讯云相关产品和产品介绍链接地址:暂无腾讯云相关产品和链接地址。

总结:object.__setattr__.__get__(self, Attribute)用于attrs/_make.py中属性的init,是为了在属性初始化过程中,自动调用__setattr__方法来设置属性的值。它可以通过自定义的方法对属性值进行处理和校验,适用于云计算领域中的属性初始化等场景。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python面向对象编程-魔术方法-__call__和__getattr__方法

Python魔术方法__call__和__getattr__方法是用于实现对象可调用和属性访问重要方法。__call__方法__call__方法是用于定义对象可调用行为魔术方法。...下面是一个简单例子,展示了如何定义一个可调用对象:class Adder: def __init__(self, n): self.n = n def __call...init__方法用于初始化对象属性n,call__方法用于实现对象可调用行为。...'z'在上面的例子,我们定义了一个DynamicObject类,其中__call__方法用于为对象动态添加属性,__getattr__方法用于实现对象动态属性访问。...在DynamicObject类实例化过程,我们创建了一个名为_attrs字典,用于存储对象属性

77082

每天一道 python 面试题 - Python元类(metaclass) 详细版本

在内存创建一个名称为“ ObjectCreator”对象。 这个对象(类)本身具有创建对象(实例)能力,这就是为什么它是一个类。...由于Python向后兼容性,这是一个问题) type 这样工作: type(name, bases, attrs) name:班级名称 bases:父类元组(对于继承,可以为空) attrs:包含属性名称和值字典...只需定义具有适当签名函数并将其分配为属性即可 >>> def echo_bar(self): ......type是Python用于在幕后创建所有类元类。 现在,您想知道为什么用小写而不是小写Type? 好吧,我想这与str创建字符串对象int类和创建整数对象一致性有关。...即使通常您可以全部__new__使用它,有些人也更习惯使用__init__。 这些被称为元类,该死!它一定意味着什么! 为什么要使用元类? 现在是个大问题。为什么要使用一些晦涩易错功能?

42610
  • 如何在 Python 中使变量不可继承

    问题背景在 Python ,子类可以继承父类属性和方法。但是,有时我们希望子类不能继承父类某些属性或方法。这种情况下,该如何做呢?2....解决方案解决方案一:使用双下划线前缀Python 双下划线前缀用于表示私有属性或方法。私有属性或方法只能在类内部访问,子类无法访问。因此,我们可以使用双下划线前缀来使变量不可继承。...这样,子类 B 就无法继承 SIZE 属性。解决方案二:使用元类元类是一种特殊类,用于创建其他类。我们可以使用元类来控制子类行为。...class ClassWithSize(type): def __init__(cls, name, bases, attrs): if 'SIZE' not in attrs:...这样,A 类及其子类必须实现 SIZE 属性,否则将引发异常。解决方案三:使用属性描述符属性描述符是一种特殊对象,用于控制属性访问和赋值操作。我们可以使用属性描述符来使变量不可继承。

    9810

    每天一道 python 面试题 - Python元类(metaclass) 详细版本

    在内存创建一个名称为“ ObjectCreator”对象。 这个对象(类)本身具有创建对象(实例)能力,这就是为什么它是一个类。...只需定义具有适当签名函数并将其分配为属性即可 >>> def echo_bar(self): ......type是Python用于在幕后创建所有类元类。 现在,您想知道为什么用小写而不是小写Type? 好吧,我想这与str创建字符串对象int类和创建整数对象一致性有关。...自定义元类 元类主要目的是在创建类时自动更改它。 通常,您要对API进行此操作,在API要创建与当前上下文匹配类。 想象一个愚蠢示例,在该示例,您决定模块所有类属性都应大写。...type实际上是它自己元类。这不是您可以在纯Python复制东西,而是通过在实现级别上作弊来完成。 其次,元类很复杂。您可能不希望将它们用于非常简单类更改。

    60300

    Python获取对象属性几种方式小结

    只是简单封装了一下,我们看看operator.attrgetter实现就知道了: class attrgetter: def __init__(self, attr, *attrs): if not...attrs: if not isinstance(attr, str): raise TypeError('attribute name must be a string') names...__dict__ {} 需要理解python一个观点,一切都是对象,不管是类还是实例,都可以看成是对象,符合object.attribute ,都会有自己属性 使用__slots__优化内存使用...但是如果要查看 a.author,因为实例属性没有,所以就去类属性找,发现果然有,于是返回其值 “qiwsir”。...但是,在找 a.lang时候,不仅实例属性没有,类属性也没有,于是就调用了__getattr__()方法。在上面的类,有这个方法,如果没有__getattr__()方法呢?

    3.9K20

    10-面向对象2

    我们以斐波那契数列为例,写一个Fib类,可以作用于for循环: class Fib(object): def __init__(self): self.a, self.b = 0...__slots__,所以不能绑定score属性,试图绑定score将得到AttributeError错误。...(k) attrs['__mappings__'] = mappings # 保存属性和列映射关系 attrs['__table__'] = name # 假设表名和类名一致...在ModelMetaclass,一共做了几件事情: 排除掉对Model类修改; 在当前类(比如User)查找定义所有属性,如果找到一个Field属性,就把它保存到一个__mappings__...dict,同时从类属性删除该Field属性,否则,容易造成运行时错误(实例属性会遮盖类同名属性); 把表名保存到__table__,这里简化为表名默认为类名。

    1.5K20

    Python中使用type、metacl

    (k) attrs['__mappings__'] = mappings # 保存属性和列映射关系 attrs['__table__'] = name # 假设表名和类名一致...在当前类(比如User)查找定义所有属性,如果找到一个Field属性,就把它保存到一个__mappings__dict,同时从类属性删除该Field属性,否则,容易造成运行时错误(实例属性会遮盖类同名属性...我们实现了save()方法,把一个实例保存到数据库。因为有表名,属性到字段映射和属性集合,就可以构造出INSERT语句。...(k) attrs['__mappings__'] = mappings # 保存属性和列映射关系 attrs['__table__'] = name # 假设表名和类名一致...__new__(cls, name, bases, attrs) class Model(dict, metaclass=ModelMetaclass): def __init__(self

    39920

    这可能是Python面向对象编程最佳实践

    __name__}(r={self.r}, g={self.g}, b={self.b})' 这里使用了 Python fstring 来实现了 __repr__ 方法,在这里我们构造了一个字符串并返回...,字符串包含了这个 Color 类 r、g、b 属性,这个返回结果就是 print 打印结果,我们再重新执行一下,结果就变成这样子了: Color(r=255, g=255, b=255) 改完之后...这个 Validator 定义时候有几个固定参数: instance:类对象 attribute属性名 value:属性值 这是三个参数是固定,在类初始化时候,其内部会将这三个参数传递给这个...运行结果如下: Point(x=100, y=3) 类型 为什么把这个放到最后来讲呢,因为 Python 类型是非常复杂,有原生类型,有 typing 类型,有自定义类类型。...cattr.structure(drop_nonattrs(d, type), type) 这里定义了一个 drop_nonattrs 方法,用于从 JSON 里面删除对象里面不存在属性,然后调用新

    1.1K40

    这可能是 Python 面向对象编程最佳实践

    __name__}(r={self.r}, g={self.g}, b={self.b})' 这里使用了 Python fstring 来实现了 __repr__ 方法,在这里我们构造了一个字符串并返回...,字符串包含了这个 Color 类 r、g、b 属性,这个返回结果就是 print 打印结果,我们再重新执行一下,结果就变成这样子了: Color(r=255, g=255, b=255) 改完之后...这个 Validator 定义时候有几个固定参数: instance:类对象 attribute属性名 value:属性值 这是三个参数是固定,在类初始化时候,其内部会将这三个参数传递给这个...运行结果如下: Point(x=100, y=3) 类型 为什么把这个放到最后来讲呢,因为 Python 类型是非常复杂,有原生类型,有 typing 类型,有自定义类类型。...cattr.structure(drop_nonattrs(d, type), type) 这里定义了一个 drop_nonattrs 方法,用于从 JSON 里面删除对象里面不存在属性,然后调用新

    1.5K50

    《流畅Python》第五章学习笔记

    在Python,函数是一等对象。 一等对象 在运行时创建 能赋值给变量或数据结构元素 能作为参数传给函数 能作为函数返回结果 第二点和第三点在实际编写代码时候经常用到!...> str: 注解不会做任何处理,知识存储在函数__annotations__属性 使用inspect.signature()函数可以提取注解。..., 2, 3) print(x(a)) # (1, 2, 3) 使用lambda实现 x = lambda x: x[1] print(x(a)) attrgetter 返回一个根据名称提取对象属性函数...', '_call') def __init__(self, attr, *attrs): if not attrs: if not isinstance...,我们把它其中一个入参固定为3,这样我们只需要传入一个参数就可以计算了 不指定冻结形参的话,默认是冻结左侧形参,该函数a

    43120

    Python3.0科学计算学习之类

    __weighe=0 #定义构造方法,用于初始化类内部状态,为类属性设置默认值:     def __init__(self,n,a,w):         self.name=n         ...① 类公有属性:public_attrs:符合正常变量命名规则,开头没有下划线,在来外部可以直接进行访问 ② 类私有属性:__private_attrs:由两个下划线开头,声明该属性为私有,不能在类外部被使用或者直接访问...在类内部方法中使用时格式为:self.__private_attrs. ③ 类构造方法: __init__():叫做构造函数或者构造方法,它在生成一个对象时被自动调用。...如上例1,p=people('Tom',10,30)语句就是调用__init__方法,将参数传递给self.name、self.age、self....__weight 要为示例类提供一些属性,即为其提供定义数据。在例,该数据将是分子和分母值。为此,必须定义一个方法__init__用于初始化具有这些值类。

    50420

    makemigrations 和 migrate工作原理分别是什么

    首先: manage.py是每个django项目中自动生成一个用于管理项目的脚本文件。需要通过python命令执行。manage.py接受是Django提供内置命令。...说白了,就是将对数据库更改,主要是数据表设计更改,在数据库真实执行。例如,新建、修改、删除数据表,新增、修改、删除某数据表内字段等等。...用于实现面向对象编程语言里不同类型系统数据之间转换 。从效果上说,它其实是创建了一个可在编程语言里使用“虚拟对象数据库”。...__new__(cls,name,bases,attrs) class Model(dict,metaclass = ModelMetaClass): def __init__(self,**...说白了,就是将对数据库更改,主要是数据表设计更改,在数据库真实执行。例如,新建、修改、删除数据表,新增、修改、删除某数据表内字段等等。

    1.2K10

    深入理解Python元类(metaclass)

    ') Fasle >>> ObjectCreator.new_attribute = 'foo' # 你可以为类增加属性 >>> print hasattr(ObjectCreator, 'new_attribute...只需要定义一个有着恰当签名函数并将其作为属性赋值就可以了 >>> def echo_bar(self): … print self.bar … >>> FooChild = type('FooChild..._metaclass__ = upper_attr # 这会作用到这个模块所有类 class Foo(object): # 我们也可以只在这里定义__metaclass__,这样就只会作用于这个类...类方法第一个参数总是表示当前实例,就像在普通类方法self参数一样。当然了,为了清晰起见,这里名字我起比较长。但是就像self一样,所有的参数都有它们传统名称。...就算通常你可以把所有的东西都在__new__里处理掉,有些人还是觉得用__init__更舒服些。 5) 哇哦,这东西名字是metaclass,肯定非善类,我要小心! 究竟为什么要使用元类?

    42740

    Python 反射

    [1]用比喻来说,反射就是程序在运行时候能够“观察”并且修改自己行为。 以上是维基百科对反射解释。我理解反射是在运行过程,获取和修改未知对象属性和方法一种解决方案。...反射广泛应用于软件测试,在运行创建和实例化对象,并操作属性和方法。...Python 反射 Python 反射方法: hasattr(obj, name): 判断对象是否有以 name 命名属性或方法。...getattr(obj, name): 获取对象以 name 命名属性或方法,如果是属性获取到将是属性值,如果是方法获取到是方法实例。...delattr(obj, name): 删除对象以 name 为名称属性或方法。 dir([obj]): 该方法返回对象大多数属性列表。

    73520

    Python学习笔记(七)·面向对象高级编程

    我们以斐波那契数列为例,写一个 Fib 类,可以作用于 for 循环: class Fib(object): def __init__(self): self.a, self.b..., attrs): attrs['add'] = lambda self, value: self.append(value) return type....(k) attrs['__mappings__'] = mappings # 保存属性和列映射关系 attrs['__table__'] = name # 假设表名和类名一致...在ModelMetaclass,一共做了几件事情: 排除掉对Model类修改; 在当前类(比如User)查找定义所有属性,如果找到一个Field属性,就把它保存到一个__mappings__...dict,同时从类属性删除该Field属性,否则,容易造成运行时错误(实例属性会遮盖类同名属性); 把表名保存到__table__,这里简化为表名默认为类名。

    52420
    领券