zoukankan      html  css  js  c++  java
  • python全栈开发 * 23 面向对象 知识点汇总 * 180704

    23 面向对象
          -----特殊方法



    1. isinstance(obj,类名)     判断对象是否是此类实例化或者此类的子类实例化出来的
    class A:pass
    class B(A):pass
    b1=B()
    print(isinstance(b1,B)) # True
    print(isinstance(b1,A)) # True
    2.issubclass(类名,类名1) 判断类名是否是类名1的子类
    class A:pass
    class B(A):pass
    print(issubclass(B,A)) #True
    print(issubclass(A,B)) #False

    3.__len__用法
    class C:
    def __init__(self):
    self.a=1
    self.b=2
    def __len__(self):
    return len(self.__dict__)
    c1=C()
    print(len(c1))
    4.__hash__用法
    class C:
    def __init__(self):
    self.a=1
    self.b=2
    def __hash__(self):
    return hash(str(self.a)+str(self.b))
    c1=C()
    print(hash(c1))
    5.__str__用法 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
    class B:
    def __init__(self,name,age):
    self.name=name
    self.age=age
    def __repr__(self):
    return "太白"
    b2=B("alex1",1000)
    print(b2)
    print("%s"% b2)

    6.__repr__用法 如果一个类中定义了__repr__方法,那么在repr(对象) 时,默认输出该方法的返回值
    class B:
    def __init__(self,name,age):
    self.name=name
    self.age=age
    def __repr__(self):
    print("666")
    return "太白"
    b1=B("alex",1000)
    print(repr(b1)) # 方法一
    print("%r"% b1) # 方法二
    #补充知识:格式化输出
    # %s 数字和字符串 %r +"" repr 原形毕露 %d 数字 %f 小数
    7.__call__用法 构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,
    即:对象() 或者 类()()
    class Foo:
    def __init__(self):
    pass
    def __call__(self,*args,**kwargs):
    print(args,kwargs)
    a1=Foo()
    a1("alex",a=666) #('alex',) {'a': 666}

    8.__eq__用法 对一个类实例化的两个对象进行比较运算的时候自动触发.
    class A:
    def __init__(self,):
    self.a=1
    self.b=2
    def __eq__(self,obj): # 需要手动传一个参数
    if self.a==obj.a and self.b==obj.b:
    return True
    a1=A()
    b1=A()
    print(a1==b1)
    9.__del__用法 析构方法
    #python垃圾回收机制:
    #文件中你创建的所有的变量,类等等,执行过程中将所有变量,类做个标记,执行完之后,在一段时间之内,没有被调用,则会自动回收.
    class A:
    def __del__(self):
    print("666")
    a1=A()
    a1.__del__

    10.__new__用法
    class A:
    def __init__(self):
    self.x=1
    print("in init function") # 第五步
    def __new__(cls,*args,**kwargs): # 第二步 自动执行__new__方法
    print(cls) # 第三步<class '__main__.A'>
    print("in new function") # 第四步

    return super().__new__(cls) # 返回一个对象空间
    return object.__new__(cls) 第二种方法
    a1=A() # 第一步 类名加括号
    11.设计模式:
    单例模式: 对一个类只能实例化一个对象.最简单的设计模式, (面试必考)
    class A:
    __instance=None
    def __new__(cls, *argsm, **kwargs):
    if A.__instance is None:
    obj=object.__new__(cls)
    A.__instance=obj
    return A.__instance
    a1=A()
    b1=A()
    c1=A()
    print(a1,b1,c1)
    12.item 用法
    class Foo:
    def __init__(self,name):
    self.name=name
    def __getitem__(self,item):
    if hasattr(self,item):
    return getattr(self,item)
    else:
    print("没有此变量")
    def __setitem__(self,key,value):
    print(key,value)
    def __delitem__(self,key):
    print(key)

    f1=Foo("alex")
    print(f1["name"])
    f1["name"]="mary"
    del f1["name"]

    补充知识点:
     python3.6版本以上,运行以上代码。字符串格式化的另一种写法。
    a = '123'
    b = f"6666{a}"
    
    
  • 相关阅读:
    java.net.ConnectException: localhost/127.0.0.1:8088 Connection refused java程序员
    网络模式:GSM,WCDMA,CDMA2000什么意思 java程序员
    Spring contextConfigLocation java程序员
    src总结 java程序员
    广州天河软件园面试Java实习生时的一些面试题 java程序员
    纠结了好久的Android SDK无法更新问题 java程序员
    Android SDK 2.3/3.0/4.0/4.1 下载与安装教程 java程序员
    域名解析文件hosts文件是什么?如何修改hosts文件? java程序员
    安卓模拟器Android SDK 4.0.3 R2安装完整图文教程 java程序员
    SpringBoot+mongoDB实现id自增
  • 原文地址:https://www.cnblogs.com/J-7-H-2-F-7/p/9265367.html
Copyright © 2011-2022 走看看