首页 > 其他分享 >Day33.元类下的属性查找

Day33.元类下的属性查找

时间:2024-07-15 14:18:48浏览次数:6  
标签:__ StanfordTeacher .__ self Day33 元类 查找 new todo

1.元类下的属性查找_对象.方法和类名.方法的查找经过

# todo 属性查找的原则: 对象 -> 类 -> 父类
# todo 切记: 父类 不是 元类

class Mymeta(type): 
    n=444
    def __call__(self, *args, **kwargs): # self=<class '__main__.StanfordTeacher'>
        obj=self.__new__(self)      # todo StanfordTeacher.__new__
        # obj = object.__new__(self)
        print(self.__new__ is object.__new__) # True
        self.__init__(obj, *args, **kwargs)
        return obj


class Bar(object):
    n=333
    # def __new__(cls, *args, **kwargs):
    #     print('Bar.__new__')

class Foo(Bar):
    n=222
    # def __new__(cls, *args, **kwargs):
    #     print('Foo.__new__')

class StanfordTeacher(Foo,metaclass=Mymeta):
    n=111
    def __init__(self,name,age):
        self.name=name
        self.age=age

    # def __new__(cls, *args, **kwargs):
    #     print('StanfordTeacher.__new__')

obj = StanfordTeacher('lili',18)    # todo 触发StanfordTeacher的类中的__call__方法的执行,进而执行self.__new__开始查找
print(obj.n)                # todo `对象.方法`继承的父类找不到会直接报错
print(StanfordTeacher.n)    # todo `类型.方法`继承的父类找不到会在元类中查找

 

标签:__,StanfordTeacher,.__,self,Day33,元类,查找,new,todo
From: https://www.cnblogs.com/vless/p/18303057

相关文章

  • 身份证信息查找
    身份证信息查看publicclass身份证信息查看{publicstaticvoidmain(String[]args){/*7-14位是出生年月日16位是性别↓任务信息为:出生年月日:×××年××月××日性别:(男/女)*/......
  • C++查找最大元素与s.find()和s.insert()
    题目描述:m老师在学习字符串的时候,对于字符串中的最大字符很感兴趣。因此他想对于输入的每个字符串,查找其中的ASCII码最大字母,在该字母后面插入字符串“(max)”。输入描述输入数据包括多个测试实例,第一行输入一个整数n表示样例个数。每个实例由一行长度不超过100的字符串......
  • java数组之线性查找、二分法查找
    一、线性查找        思想:如果想在一个数组中查找是否有某个元素,最容易想到的办法就是遍历数组,将数组中元素与想要查找的元素逐个对比,如果相等表示找到了,如果不等,则表示没找到。这就是线性查找的思想。案例说明定义数组:int[]arr1=newint[]{34,54,3,2,65,7,34,5,......
  • Day33.定制元类控制类的产生
    1.定制元类控制类的产生_类People继承类Mymeta'''如何自定义元类(type)来控制类的产生'''#todometaclass=type:代表继承原有的元类type#classPeople(metaclass=type):#todometaclass=Mymeta:代表继承自定义的元类MymetaclassMymeta(type):#只有继承了type类的......
  • Day33.内置方法
    1.内置方法_自定义类和内置方法的输出2.内置方法_方法__str__需要返回一个字符串3.内置方法_方法__str__返回对象数据4.内置方法_方法__del__未清理对象先执行类外的程序,然后再执行类下的__del__方法5.内置方法_方法__del__清理对象之后,先执行类下的__del__方法6.内置方......
  • js 数组方法 - 查找 - indexOf()、includes()、find()、findIndex()、filter()、lastI
    indexOf()该方法可以返回数组中指定元素的索引,如果不存在,则返回-1。constarr=["apple","banana","orange"];constindex=arr.indexOf("banana");console.log(index);//输出:1constarr2=["aaa","bbb","ccc",9......
  • 0081_Search-in-Rotated-Sorted-Array-II【M】pivot 有序数组(值可重复)中的查找数值
    JY:pivot有序数组(值可重复)中的查找数值1、二分查找该题的任何解法同样可用于0033_search-in-rotated-sorted-array【M】中nums可能包含重复元素,这会影响到程序的时间复杂度吗?会,使用二分查找局部有序时,当nums[mid]==nums[low]时(或其它类似情况),无法确定左侧区间还是右......
  • leetcode 704.二分查找
    重点区分:while(left<right) 和 while(left<=right)right=middle和right=middle-1当处于左闭右闭区间内时,while(left<=right)当处于左闭右开区间时,while(left<right)right=middle和right=middle-1,以此类推1.原理(来源代码随想录)(1)第一种情况(2)第二......
  • 数据结构之折半查找
     折半查找的算法思想:折半查找又称二分查找,它仅仅适用于有序的顺表。折半查找的基本思想:首先将给定值key与表中中间位置的元素(mid的指向元素)比较。mid=low+high/2(向下取整)若key与中间元素相等,则查找成功,返回该元素的存储位置,即mid;若key与中间元素不相等,则所需查找的元素只......
  • 二分查找的循环条件及指针终止位置问题
    二分查找的循环条件及指针终止位置问题常见的二分搜索法的循环迭代方法分为:左闭右开和左闭右闭两种方式左闭右开:由于右边界开放,例如[1,1)是矛盾的,因此循环条件为while(l<r)。闭合指后续迭代仍需要进行对其元素进行比较。因此每次迭代结束,左指针l移动到中点的下一位l=mi......