python学习过程中经常遇到cls、self有什么区别,类和函数带不带括号什么区别,创建类带不带括号有什么区别,这里打算汇总一下
1、创建类时加不加括号的区别:
class A:
pass
class A():
pass
class A(object):
pass
在python2中他们是有一些差别的,不加括号的,或者加括号未继承其他类的是经典类(旧式类) ,加括号继承其他类或者Object的是新式类,对 object 的继承需要显式地写为 FrenchDeck(object)。
python3中都是新式类,这个继承关系是默认的,所以他们无差别
2、类实例化的时候加不加括号的区别:
class A():
def __init__(self):
print("init调用")
A
》》
什么都不会输出
A()
》》
init调用
- 不带括号A
- 本质上是给类对象起了一个别名也可以说是赋值,类似C语言中的typedef关键字,而并不会创建一个实例。
- 不加括号不会调用__init__函数
- 一般要使用某个类的方法,需要先实例化一个对象再调用方法。如果类上有@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。
- 加括号A()
- 是对类的实例化
- 会调用__init__函数
class A():
@classmethod
def printcls(cls):
print("这里是A(cls):", cls)
def printself(self):
print("这里是A(self):", self)
a=A()
b=A()
print("A:",A)
print("id(A):",id(A))
print("================")
print("a=A():",a)
print("id(a=A())",id(a))
print("b=A():"<