Python----面向对象--属性查找小练习

属性查找小练习:

 1 class Foo:
 2     def f1(self):
 3         print(‘from Foo.f1‘)
 4
 5     def f2(self):
 6         print(‘from Foo.f2‘)
 7         self.f1()
 8
 9
10 class Bar(Foo):
11     def f2(self):
12         print(‘from Bar.f2‘)
13
14
15 b = Bar()
16 b.f2()
17
18 结果为:
19
20 from Bar.f2

稍作修改:

 1 class Foo:
 2     def f1(self):
 3         print(‘from Foo.f1‘)
 4
 5     def f2(self):
 6         print(‘from Foo.f2‘)
 7         self.f1()
 8
 9
10 class Bar(Foo):
11     def f1(self):
12         print(‘from Bar.f2‘)
13
14
15 b = Bar()
16 b.f2()
17
18 结果为:
19 from Foo.f2
20 from Bar.f2

可以看出,属性的查找顺序为先从对象自身查找,然后从对象所在的类进行查找,然后从父类查找,依次查找,直至找到或者报错没有找到,

原文地址:https://www.cnblogs.com/xudachen/p/8592644.html

时间: 2024-11-05 00:57:01

Python----面向对象--属性查找小练习的相关文章

Python面向对象属性

也是好久没有更新过了,今天主要想写的就是关于面向的对象的属性的问题. 属性的解释来看,能够简单的理解为方法但是是用字段的方式来调用方法.除此之外,另外一种是不加装饰器,利用python提供方式来写,根据你不同的对象来进行用,其实本质也是定义方法,来用对象调用. 1 class Object: 2 def f1(self): 3 return '123' 4 def f2(self, value): 5 print(value) 6 def f3(self): 7 a = 1 + 1 8 prin

Python面向对象之类属性类方法静态方法

类的结构 实例 使用面向对象开发时,第一步是设计类: 当使用 类名() 创建对象时,会自动执行以下操作: 1.为对象在内存中分配空间--创建对象: 2.为对象的属性 设置初始值--初始化方法(init); 对象创建后,内存中就有了一个对象的实实在在的存在--实例: 因此通常也会把: 1.创建出来的对象叫做类的实例: 2.创建对象的动作叫实例化: 3.对象的属性叫实例属性: 4.对象调用的方法叫实例方法: 在程序执行时: 1.对象各自拥有自己的实例属性: 2.调用对象方法,可以通过self. 访问

python属性查找(attribute lookup)

在Python中,属性查找(attribute lookup)是比较复杂的,特别是涉及到描述符descriptor的时候. 在上一文章末尾,给出了一段代码,就涉及到descriptor与attribute lookup的问题.而get系列函数(__get__, __getattr__, __getattribute__) 也很容易搞晕,本文就这些问题简单总结一下. 首先,我们知道: python中一切都是对象,"everything is object",包括类,类的实例,数字,模块

python属性查找 深入理解(attribute lookup)

在Python中,属性查找(attribute lookup)是比较复杂的,特别是涉及到描述符descriptor的时候. 在上一文章末尾,给出了一段代码,就涉及到descriptor与attribute lookup的问题.而get系列函数(__get__, __getattr__, __getattribute__) 也很容易搞晕,本文就这些问题简单总结一下. 首先,我们知道: python中一切都是对象,"everything is object",包括类,类的实例,数字,模块

Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在python2.x中,若没指定父类,则不会以object作为基类. 2)旧式类(经典类):在定义类时,类后边括号中不用继承object类,甚至不用括号. 3)dir方法是用来查看类的内置方法. 二.私有方法和属性 1)私有属性是对象不希望公开的属性:私有方法是对象不希望公开的方法.在定义私有属性和方法时,在属

python属性查找

python中执行obj.attr时,将调用特殊方法obj.__getattribute__('attr'),该方法执行搜索来查找该属性,通常涉及检查特性.查找实例字典.查找类字典以及搜索基类.如果搜索过程失败,最终会尝试调用类的__getattr__()方法.如果这也失败,则抛出AttributeError异常. 具体步骤如下: 1.如果attr是个特殊属性(例如python提供的),直接返回. 2.在obj.__class__.__dict__即类字典中查找attr,如果attr是个data

python:属性查找与绑定方法

属性查找 类有两种属性:数据属性和函数属性 1.类的数据属性是所有对象共享的 # 类的数据属性是所有对象共享的,id是一样的 print(id(OldboyStudent.school)) # 4830576 print(id(s1.school)) # 4830576 print(id(s2.school)) # 4830576 print(id(s3.school)) # 4830576 2. 类的函数属性是绑定给对象用的,称为绑定到对象的方法 # 类的函数属性是绑定给对象使用的,obj.m

Python 面向对象编程基础——初始化实例、类属性、方法

#1.初始化实例化属性.#可接受任意关键字参数,并把他们都作为属性赋值给实例.使用**kw,除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过setattr(self, 'name', 'xxx')设置属性.class Person(object):    def __init__(self, name, gender, **kw):        self.name = name        self.gender = gender        for k,v i

python之属性描述符与属性查找规则

描述符 import numbers class IntgerField: def __get__(self, isinstance, owner): print('获取age') return self.num def __set__(self, instance, value): print('设置age值时') if not isinstance(value, numbers.Integral): raise ValueError('int need') self.num = value