Python3中定义类的时候加括号和不加括号有区别吗?
在Python中定义类class的时候,可以加上():
#!/usr/bin/env python3
class Persion():
def __init__(self,name):
self.name = name
print(self)
print(type(self))
print(self.__class__)
### 实例化
tt = Persion("aa")
也可以不加上():
#!/usr/bin/env python3
class Persion:
def __init__(self,name):
self.name = name
print(self)
print(type(self))
print(self.__class__)
### 实例化
tt = Persion("aa")
我们还可以加 object
#!/usr/bin/env python3
class Persion(object):
def __init__(self,name):
self.name = name
print(self)
print(type(self))
print(this.__class__)
### 实例化
tt = Persion("aa")
object 又是什么?
object是python的默认类,他有很多的方法,比如list,str,dict等等都是继承了object类的方法。
继承了object的类属于新式类 ,没有继承属于经典类
python2 中有新式类和经典类的说法,因为在python2中有不继承object类的所以有经典类
而在Python3中只有新式类的说法,也就是说有类都是继承了object类的
在python3种默认都是新式类,也即是所有的自定义类,基类都会继承object类。
换一句说就是 在python3.x的所有类都是object的子类。所以对于一些内置的方法会写在object类中。如果子类不定义,在调用的时候最终会调用object类中的方法。就不会让程序出现不必要的错误了。
比如我们常见的构造方法(__init__),就属于内置方法。
总结:
事实上是在功能上没有区别的,以下三种写法在功能上是等价的:
class A:
pass
class A():
pass
class A(object):
pass