You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用方法/函数时“.”的用法困惑求解

关于Python中.的两种常见用法解惑

嘿,刚学Python没几天就能注意到这个细节,真的超棒!其实你困惑的点,核心是搞清楚**.在不同场景下的作用本质**——它本质上都是用来访问某个对象的成员/属性,但对象的类型不同,调用逻辑就不一样。

先给你拆解一下np.random.rand()的逻辑:

  1. np是我们导入numpy模块时取的别名,它本身是一个模块对象;
  2. random是numpy模块里的一个子模块(你可以理解成模块里的“子文件夹”,专门放随机数相关的功能);
  3. rand()是这个random子模块里定义的普通函数,它不需要绑定任何类实例,直接调用就能生成随机数。

这里的每一个.,只是用来“深入”访问上一级对象的成员:从主模块np,进到子模块random,再调用里面的函数rand()——和你理解的类实例方法的.,作用完全不同。

再对比你已经懂的类方法场景:
类内部定义的def是实例方法,它的第一个参数self是用来绑定调用它的实例的,所以必须用实例名.方法名()的方式调用,这时候.的作用是把实例和方法绑定起来,让self能指向这个实例。

举个更直观的例子,你可以自己模拟这个结构:
假设你写了一个简单的模块文件my_tools.py:

# my_tools.py
# 模块里的普通函数
def say_hi():
    print("Hi from module!")

# 模块里的子模块(简化版,实际可以是单独的子模块文件)
class RandomUtils:
    @staticmethod
    def generate_num():
        return 42  # 随便返回一个数

# 把RandomUtils实例化后作为模块的成员,模拟np.random的结构
random = RandomUtils()

然后在另一个文件里导入调用:

import my_tools as mt

# 调用模块里的普通函数
mt.say_hi()

# 调用模块子对象里的静态函数,就像np.random.rand()
mt.random.generate_num()

这里的mt.random.generate_num()和np.random.rand()逻辑完全一致:都是通过.访问模块里的成员,再调用成员里的函数,不需要绑定实例(因为这里用了静态方法,和普通模块函数一样不需要self)。

最后再帮你梳理一下.的核心用法:

  • 当.左边是类的实例时:调用的是实例方法,self会自动绑定这个实例,这是你已经理解的场景;
  • 当.左边是模块/子模块时:只是访问模块里的函数、类、子模块等成员,这些成员不需要绑定实例,直接调用即可;
  • 还有一种情况:.左边是类对象时,调用的是类方法或静态方法,也不需要实例,但这是另一个进阶知识点了,你以后会慢慢接触到。

内容的提问来源于stack exchange,提问作者Leo Ryuta Unoki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:49:46