• python声明类时继承不继承object类的区别


    不加的叫做经典类或旧式类,但是现在python3的类都默认是继承了object的,所以可写可不写

    下面举个例子说明:

    首先说明下__class__功能与用法:
    • __class__功能和type()函数一样,都是查看对象所在的类。
    • __class__可以套用

    在python3的环境下运行:

    #coding:utf-8
    #不继承
    class Car():
        pass
    
    #继承
    class Bag(object):
        pass
    
    if __name__ == "__main__":
        car = Car()
        bag = Bag()
        print('实例所在类')
        print(type(car))
        print(type(bag))
    
        print('类所在类')
        print(type(Car))
        print(type(Bag))
    
        print('实例所在类')
        print(car.__class__)
        print(bag.__class__)
        print(bag.__class__.__class__)#实例所在类所在的类
    
        print('类所在类')
        print(Bag.__class__)
        print(Car.__class__)  # 类的类型都是type

    返回:

    /Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py
    实例所在类
    <class '__main__.Car'>
    <class '__main__.Bag'>
    类所在类
    <class 'type'>
    <class 'type'>
    实例所在类
    <class '__main__.Car'>
    <class '__main__.Bag'>
    <class 'type'>
    类所在类
    <class 'type'>
    <class 'type'>
    
    Process finished with exit code 0

    可见结果是一样的,说明python3中有没有继承都一样,因为底层已经帮你继承了

    如果我使用的是python2的环境来运行,返回内容为:

    (deeplearning2) userdeMacBook-Pro:python3 user$ python test.py
    实例所在类
    <type 'instance'>
    <class '__main__.Bag'>
    类所在类
    <type 'classobj'>
    <type 'type'>
    实例所在类
    __main__.Car
    <class '__main__.Bag'>
    <type 'type'>
    类所在类
    <type 'type'>
    Traceback (most recent call last):
      File "test.py", line 28, in <module>
        print(Car.__class__)  # 类的类型都是type
    AttributeError: class Car has no attribute '__class__'

    ⚠️python2不支持 类名.__class__

    可见如果不继承object,实例的类型为instance类,类的类型为classobj类

    而继承object的类,类的类型都是type类

    除此之外还有一个区别就是内置函数的不同:

    #coding:utf-8
    #不继承
    class Car():
        pass
    
    #继承
    class Bag(object):
        pass
    
    if __name__ == "__main__":
        car = Car()
        bag = Bag()
        print(dir(car))
        print(dir(bag))

    在python3中都是相同的,这里就不展示了。但是如果是在python2的环境下运行,返回:

    (deeplearning2) userdeMacBook-Pro:python3 user$ python test.py
    ['__doc__', '__module__']
    ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

    可见继承了object类的类,有更多的内置函数可以使用,当你想要完成一些复杂操作的时候就很有用了

  • 相关阅读:
    sql中的exists用法
    采用spring的schedule注解配置定时任务
    java通过传入的日期,获取所在周的周一至周日
    forever start app.js 启动node时,服务访问一次后第二次就不能访问了
    linux 安装nginx
    linux 常用命令
    8位字节表示的有符号数范围是-128~127
    极光推送免费版
    tomcat 设置连接数
    查看linux内存使用情况
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/11193708.html
Copyright © 2020-2023  润新知