首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >加不加括号(),原来这么多讲究!Python类

加不加括号(),原来这么多讲究!Python类

作者头像
大飞记Python
发布2026-04-14 20:27:46
发布2026-04-14 20:27:46
340
举报

在Python中,定义类和调用类时,带()和不带()有重要区别。一定要区分好它们之间的差别

1、定义类时带()和不带()

1.1、不带()- 默认继承object

代码语言:javascript
复制
class MyClass:
    pass

# 等价于
class MyClass():
    pass

# 也等价于
class MyClass(object):
    pass

这三种写法在Python 3中是完全等价的,都继承自object类。

1.2、带()- 继承指定父类

代码语言:javascript
复制
class ChildClass(ParentClass):
    pass

class Child1(Parent1, Parent2, Parent3):
    pass

我们一般在开发过程中默认以下规则,以示区别:

  • 如果不继承指定父类,定义类时不加()
  • 如果继承指定父类,定义类时加()

2、调用类时带()和不带()

2.1、不带()- 引用类本身

代码语言:javascript
复制
class MyClass:
    def myname(self, name):
        return name

if __name__ == '__main__':
    per = MyClass  # 将类本身赋值给 per,没有创建实例
    print(per)
    # print(per.myname("dafei"))  # 这行被注释,如果取消注释会报错

输出结果

代码语言:javascript
复制
<class '__main__.MyClass'>
  • per = MyClass
    • 这里 per 被赋值为类 MyClass 本身,而不是类的实例。
  • print(per)
    • 在 Python 中,类也是一个对象(类对象),所以 print(per) 输出的是类的表示形式,即 <class '__main__.MyClass'>(表示这是一个定义在 __main__ 模块中的类)
  • 被注释的 print(per.myname("dafei"))
    • 如果取消注释,这行代码会报错(TypeError),因为 per.myname 是一个实例方法,需要类的实例作为第一个参数(self)。但这里 per 是类本身,调用 per.myname("dafei") 相当于直接调用类方法,但没有提供 self 参数,因此会失败

2.2、带括号 () - 实例化类

代码语言:javascript
复制
class MyClass:
    def myname(self, name):
        return name

if __name__ == '__main__':
    per = MyClass()  # 创建 MyClass 的一个实例
    print(per)
    print(per.myname("dafei"))

输出结果

代码语言:javascript
复制
<__main__.MyClass object at 0x102c4bfd0>
dafei
  • per = MyClass()
    • 这里使用括号 () 创建了 MyClass 的一个实例(对象),并赋值给 per。因此 per 现在是一个实例对象
  • print(per)
    • 输出实例对象的表示形式,即 <__main__.MyClass object at 0x102c4bfd0>(这表示MyClass 的实例对象,位于内存地址 0x102c4bfd0
  • print(per.myname("dafei"))
    • 调用实例方法 myname,并传递参数 "dafei"。方法返回 "dafei",因此打印出 dafei。这里 self 参数自动绑定到实例 per,所以可以调用成功

小伙伴们可以收藏这篇文章,在定义类和调用类时记得查看一下,不要在debug时,才后悔莫及喔~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大飞记Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、定义类时带()和不带()
    • 1.1、不带()- 默认继承object
    • 1.2、带()- 继承指定父类
  • 2、调用类时带()和不带()
    • 2.1、不带()- 引用类本身
    • 2.2、带括号 () - 实例化类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档