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

我的类没有调用Python - __get__

get是Python中的一个特殊方法,用于定义描述符(descriptor)。描述符是一种可以自定义属性访问行为的对象,它可以被用作类的属性。

在Python中,当我们访问一个属性时,实际上是在调用该属性所属对象的getattribute方法。而如果该属性是一个描述符对象,那么Python会调用描述符对象的get方法来获取属性的值。

get方法接受三个参数:self、instance和owner。其中,self是描述符对象自身,instance是调用该属性的实例对象,owner是该属性所属的类对象。

当我们访问一个属性时,Python会首先查找该属性是否是描述符对象,如果是,则调用描述符对象的get方法来获取属性的值。如果不是描述符对象,则直接返回属性的值。

描述符对象可以用于实现一些高级的属性访问控制,例如计算属性、延迟加载等。通过自定义get方法,我们可以在属性被访问时执行一些额外的逻辑。

以下是一个示例代码,演示了如何定义一个简单的描述符对象,并在get方法中添加一些额外的逻辑:

代码语言:txt
复制
class Descriptor:
    def __get__(self, instance, owner):
        print("Accessing attribute")
        return instance._value

class MyClass:
    attribute = Descriptor()

    def __init__(self, value):
        self._value = value

obj = MyClass(42)
print(obj.attribute)

输出结果为:

代码语言:txt
复制
Accessing attribute
42

在上述示例中,我们定义了一个名为Descriptor的描述符对象,并将其作为MyClass类的属性attribute。当我们访问obj.attribute时,Python会调用Descriptor对象的get方法,并输出"Accessing attribute",然后返回obj._value的值。

需要注意的是,描述符对象可以用于类属性和实例属性。当描述符对象作为类属性时,它会被所有实例对象共享。而当描述符对象作为实例属性时,每个实例对象都会有自己的描述符对象。

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

  • 云服务器(CVM):提供可扩展的计算容量,用于部署应用程序和服务。
  • 云数据库 MySQL:高性能、可扩展的关系型数据库服务。
  • 云原生容器服务 TKE:基于Kubernetes的容器管理服务,用于快速部署和管理容器化应用。
  • 人工智能平台 AI Lab:提供丰富的人工智能开发工具和服务,帮助开发者构建智能化应用。
  • 物联网套件 IoT Hub:提供全面的物联网解决方案,用于连接、管理和控制物联网设备。
  • 移动推送 TPNS:高效、稳定的移动推送服务,用于向移动设备发送推送通知。
  • 对象存储 COS:安全、稳定的云端存储服务,用于存储和管理海量数据。
  • 区块链服务 BCOS:基于腾讯云的区块链服务,用于构建可信赖的区块链应用。
  • 云直播 CSS:高可用、低延迟的音视频直播服务,用于实时传输音视频数据。
  • 云媒体处理 MPS:提供音视频处理和分发服务,用于实现音视频的转码、截图、水印等功能。

以上是腾讯云提供的一些相关产品,可以根据具体需求选择适合的产品来支持云计算和开发工作。

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

相关·内容

链式调用 | 代码没有else

嗯,代码没有else系列,一个设计模式业务真实使用golang系列。 ? 前言 本系列主要分享,如何在我们真实业务场景中使用设计模式。...- 实现抽象方法`Do`:具体获取购物车数据逻辑 ......略 子类X(以及未来会增加逻辑) - 继承抽象 - 实现抽象方法`Do`:以及未来会增加逻辑 但是,golang里没有的继承概念...代码demo package main //--------------- //代码没有`else`系列 //责任链模式 //@auhtor TIGERB<https://github.com/...代码没有`else`,只是一个在代码合理设计情况下自然而然无限接近或者达到结果,并不是一个硬性目标,务必较真。 2....---- 代码没有else系列 更多文章 代码模板 | 代码没有else 点击https://github.com/TIGERB/easy-tips/tree/master/go/src/patterns

1.7K40

python__get__、__set

函数和方法         静态方法和方法 摘要     定义并展示如何调用描述符,展示自定义描述符和几个内置python描述符,包括函数、属性、静态方法和方法,通过给出一个Python示例应用来展示描述符是如何工作...__dict__['x'] -> type(a)(不包括元),如果查找值是对象定义描述方法之一,python可能会调用描述符方法来重载默认行为,     发生在这个查找环节哪里取决于定义了哪些描述符方法...__getattribute__() 查询      注意:在python2.2,如果m是一个数据描述符,super(B, obj).m() 会调用__get__(),在python2.3,无数据描述符也会执行调用...唯一不同之处,就是第一个参数用来表示对象实例,python约定,实例引用可以使self或者this或者其他变量名称     为了支持方法调用,函数通过__get__()方法来实现属性访问时方法绑定...,方法一个用途是用来创建不同构造器,在python2.3中,方法dict.fromkeys()可以使用一个key列表来创建字典,python实现方式: class Dict

1.3K20
  • python调用方法三种方式(super调用和父调用

    子类调用方法三种方式:父名.方法名(self)super(子类名,self).父方法名()super().父方法名注意:super()通过子类调用当前父方法,super默认会调用第一个父方法...,吃", self.food)#People中name属性和say()会覆盖Animalclass Person(People, Animal): pass#Python小白学习交流群:...也就是说,涉及到多继承时,在子类构造函数中,调用第一个父构造方法方式有以上两种,而调用其他父构造方法方式只能使用未绑定方法。...是动物,吃 熟食可以看到,Person自定义构造方法中,调用People构造方法,可以使用super()函数,也可以使用未绑定方法。...但是调用Animal构造方法,只能使用未绑定方法

    1.1K20

    python调用matplotlib报错_pycharm没有matplotlib模块

    大家好,又见面了,是你们朋友全栈君。...【问题描述】 按照常规库安装步骤: 点击 file –> settings 点击右边➕(可能不同版本位置不太一样): 搜索 “matplotlib”,点击下面 “install package”...,显示如下错误: 点击 “Detail” ,发现是一堆看不太懂warning和error: 【解决方法】 点击 “manage repositories”: 添加如下镜像网址(除第一个外其他是另外添加...): 添加完后再搜索 “matplotlib” ,选择新添加任意一个网址,点击安装 此时又报错(不要着急,就要成功了),点击 “Detial” ,复制如下指令: 回到以下界面粘贴在 “options...” 右边框中: 再次点击 “install package” : “pandas” 安装与上面的步骤一样 【问题反思】 可能是因为网络带宽或是访问限制问题,在第一个网址无法正常获取安装包,通过镜像网站可以轻松解决以上问题

    62630

    Python_子类调用方法

    1.方式一 子类调用方法,包含2中形式调用。一种形式是在内部通过继承方式调用方法,另外一种形式是子类实例化后之后通过继承方式来调用方法。如下图所示: ?...注意一点,在子类内部通过继承方式调用属性时,必须要带上self位置参数(self只在实例化过程中和在实例调用属性时才能省略(self本来含义就是指向实例自己));而实例在通过继承调用属性或方法时...该部分代码块如下:注意一点,在子类内部通过继承方式调用属性时,必须要带上self位置参数(self只在实例化过程中和在实例调用属性时才能省略(self本来含义就是指向实例自己));而实例在通过继承调用属性或方法时...3班") #调用子类本身方法 student.course() #通过子类调用方法--->实例化之后来调用方法 student.eat() #调用子类方法,在子类方法中调用了子类方法,..."11届土木3班") #调用子类本身方法 student.course() #通过子类调用方法--->实例化之后来调用方法 student.eat() #调用子类方法,在子类方法中调用了子类方法

    4.8K20

    Python|多重继承及super()调用

    python中有关子类多重继承所涉及问题。如super函数,若是多个子类继承自相同与不同会有什么不同?当子类存在多个父时,继承先后顺序是怎样?一起来探究一下其中规律。...图 1 子类多重继承 这时细心朋友可能会提出问题:为什么当子类F继承C时,为什么C没有继续去继承A,而作为F另一个父D却去继承了A?...__init__() 首先super函数会找到C(A),然后把C对象转化为父(A)对象,然后调用对象方法。...由上述分析及结果可以得到一个结论:当多重继承中存在多个子类同时继承相同时,且自身作为父时(C,D均为F),例如C,D两个子类同时去继承相同(A)时,利用super()函数只会在最后一个调用...图 2 结果 由此可见,当父变为不同时,super()就会分别调用各个父,并输出每一个调用,例子中C,D就会分别调用他们A和B,这样就会输出上述结果。

    1.5K10

    Python继承(调用成员与方法)

    python初始化方法是__init__(),因此父子类初始化方法都是这个,如果子类不实现这个函数,初始化时调用初始化函数,如果子类实现这个函数,就覆盖了父这个函数,既然继承父,就要在这个函数里显式调用一下父...__init__(),这跟C++,jAVA不一样,他们是自动调用初始化函数。...调用函数有以下方法: Python class Animal():     def __init__(self, name):         self.name = name       def...).parent_attribute(arg) 【不需要写self】 3.在定义中调用本类方法,可以直接 super().parent_method(arg) 【个人推崇这种写法】 样例如下:..., and I can bark I am Blake I am Blake I am Blake I am Blake ''' 如果要调用成员记住在父中不能是私有变量,及self.

    5.5K41

    是这样学会了Python与对象知识,网上没有看到这种见解

    最近有许多小伙伴问我要入门 Python 资料,还有小伙伴完全没有入门 Python 就直接购买了 pandas 专栏。...因此决定写几篇 Python 数据处理分析必备入门知识系列文章,以帮助有需要小伙伴们更好入门。 ---- 前言 关于 Python与对象相关知识,网络上已经有非常多教程。...获取对象数据字典 name 对应数据 行12:实例 + 点 + 函数名字 + 括号 ,执行对应函数 但是,为什么 show_me 函数中,有一个参数,但上面的调用没有传入任何东西?...同理,学生中定义 show_me 函数第一个参数 self ,实际就是调用时,要传入实例本身。...这听起来像绕口令一样,如果换一种方式执行 show_me 就很清晰: 通过 名 + 点 + 函数名字 + 括号,可以调用该函数 实际上,这才是调用真面目!

    79620

    python之类重写父方法与调用方法

    Python 优雅语法和动态类型以及解释型语言本质,使它成为多数平台上写脚本和快速开发应用理想语言。下面我们来介绍一下python重写父方法与调用方法。...---- 二、重写父方法与调用方法   在继承关系中,子类会自动继承父中定义方法,但如果父方法功能不能满足需求,就可以在子类中重写父方法。...1、重写父方法示例 #定义一个父 class Person: def speak(self): #定义方法用于输出 print ('是一个人类') #定义一个子类...2.子类调用方法   如果需要在子类中调用方法,可以使用内置函数super()或通过“父名.方法名()”方式来实现。 例:子类调用方法示例。...---- 三、参考 1、廖雪峰官网 2、python官网 3、Python编程案例教程 ---- 四、总结   以上就是就是关于Python重写父方法与调用方法相关知识,可以参考一下,觉得不错的话

    2.7K30

    Python实现子类调用方法

    Person,但是并没有调用__init__()方法,那么怎样调用方法呢?...有如下两种解决方案: 方法一:调用未绑定构造方法 class Person(object): def __init__(self): self.name = "Tom"...return self.age if __name__ == "__main__": stu = Student() print stu.getName() 这种方法叫做调用未绑定构造方法...在调用一个实例方法时,该方法self参数会被自动绑定到实例上(称为绑定方法)。但如果直接调用方法(比如Person.__init__()),那么就没有实例会被绑定。...方法一更直观,方法二可以一次初始化所有超. super函数比在超累中直接调用未绑定方法更直观,但是其最大有点是如果子类继承了多个父,它只需要使用一次super函数就可以。

    3.1K10

    Python进阶——什么是描述符?

    Ten 中定义了一个 __get__ 方法,返回具体值。 在 Python 中,允许把一个类属性,托管给一个,这个属性就是一个「描述符」。 换句话说,「描述符」是一个「绑定行为」属性。..._set__ 被调用,参数 obj 是 Person 实例,value 是25 当调用 p1.age = -1时,__set__ 没有通过校验,抛出 ValueError 其中,调用 __set__ 传入参数...,我们比较容易理解,但是对于 __get__ 方法,通过或实例调用,传入参数是不同,这是为什么?...中,都有一个统一调用逻辑: 先调用 __getattribute__ 尝试获得结果 如果没有结果,调用 __getattr__ 用代码表示就是下面这样: def getattr_hook(obj,...如果是非数据描述符,则调用非数据描述符 __get__ 如果也不是一个非数据描述符,则从类属性中查找 如果类中也没有这个属性,抛出 AttributeError 异常 写成代码就是下面这样: # 获取一个对象属性

    35530

    有效python属性管理:描述符使用

    __get__()对象,则直接调用d....如果是对实例属性进行访问,则属性访问转译关键就在于基object__getattribute__方法,我们知道这个内置方法是在进行属性访问时候无条件调用,因此这个方法中将obj.d转译成了type...__get__(None, cls),这里__get__()instance没有也就是相应None了。...因此在定义自己描述符__get__()时候进行了判断是否该相应实例属性已经初始化,若未初始化则进行初始化,若已初始化直接返回,达到了惰性访问目的: def __get__(self, instance...例如我想针对每个学生创建对应身高描述符,而且把身高数据放在描述符中,可以这样定义描述符: ?

    80290
    领券