zoukankan      html  css  js  c++  java
  • 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类的类,有更多的内置函数可以使用,当你想要完成一些复杂操作的时候就很有用了

  • 相关阅读:
    性能测试相关名词
    Java中的并发工具类:CountDownLatch、CyclicBarrier和Semaphore
    spring与mybatis五种整合方法
    Powerdesigner使用技巧
    基于Redis的Spring cache 缓存介绍
    AspectJ AOP介绍
    Spring AOP的实现原理
    -webkit-tap-highlight-color
    Zero Clipboard js+swf实现的复制功能使用方法
    CSS3 RGBA 属性高级用法
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/11193708.html
Copyright © 2011-2022 走看看