• Python类的疑难点


    一、继承

    1、Python类的继承与Java非常不同,它是通过直接在子类名称后面跟上小括号(),在括号里面写上父类的名称,例如:

    父类:

    class Cat():

    子类:

    class SubCat(Cat):

    2、特殊的类:object

    2.1、object类是所有类的父类,因此所有类都有object类的属性和方法。

    1. class Dog:
    2. def __init__(self):
    3. self.name = "hello"
    4. dog = Dog()
    5. print(dir(dog))

    输出的结果如下:

    ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']

    2.2、class Layer(object)

    在老的代码里面会有上的写法,如果不直接写的话,是不会从object类继承的,也就是不会继承object相关的属性和方法,但是新版本的Python全部都继承自object,就像Java的Object类一样。所以大家看到有些代码里面会有如上的写法。

    2.3、dir()函数

    返回对象的属性和方法

    二、类的对象可以像函数一样被调用

    经常会在代码里面看到如下的写法:

    1. dog = Dog()
    2. dog()

    首先创建一个对象,然后对象像函数一样被调用了。what?

    1、__call__()是一种magic method,在类中实现这一方法可以使该类的实例(对象)像函数一样被调用。默认情况下该方法在类中是没有被实现的。

    2、如果类没有实现该函数,调用__call__()会报错吗?

    Traceback (most recent call last):
      File "Dog.py", line 8, in
        dog()
    TypeError: 'Dog' object is not callable

    从代码运行的结果看,直接报错了!!!

    3、重写__call__()

    1. class Dog:
    2. def __init__(self):
    3. self.name = "hello"
    4. def __call__(self, *args, **kwargs):
    5. print("hello world!!!")
    6. dog = Dog()
    7. dog()

    程序输出结果:

    hello world!!!

    其实这两种写法等价:

    dog() == dog.__call__()

  • 相关阅读:
    Games104现代游戏引擎笔记 基础ai
    Debian11之稳定版本Jenkins安装
    后端的前段基础
    Redis从入门到放弃(9):集群模式
    CrossOver2023(Mac电脑运行Windows软件)
    信创环境下Nginx正向代理实现内网发送邮件
    C语言入门 Day_12 一维数组
    柱子哥的面试题
    Himall商城LinqHelper帮助类(1)
    uniapp使用renderjs实现echarts
  • 原文地址:https://blog.csdn.net/duzm200542901104/article/details/127777161