Python中类-带括号与不带括号的区别
  引⾔
  有时候看到⾥⼀些⼈问⼀些基础的知识,虽然很基础,⽹上随便⼀查即可知道,但是往往很多⼈就是连这些基础的知识都很模糊,甚⾄不清楚,这⾥再来复习⼀下python中类的⼀个知识点(仅此)。
  类的定义
  ⽤来描述具有相同的属性和⽅法的对象的集合。它定义了该集合中每个对象所共有的属性和⽅法。对象是类的实例。
  举个⽣活栗⼦,⼀个公司可以看作⼀个类,公司下的部门,可以⽅法,公司有很多不同级别的领导,可以看作是属性,部门可以有很多,领导可以是BOSS,也可以是⼩部门的领导。所以⼀个类下⾯可以有多个⽅法和多个属性,属性可以只属于某个⽅法,也可以是全局的。
  类的创建
  python3创建类的⽅式有两种,⼀种带括号,⼀种不带括号。
class Test:
def __init__(self,x):
self.x = x
def outprint(self):
return self.x
class Test2:
def __init__(self,x):
self.x = x
def outprint(self):
return self.x
class Test3(object):
def __init__(self,x):
self.x = x
def outprint(self):
return self.x
a = Test
b = Test2
c = Test3
print(a)
print(b)
print(c)
print(a(1))
print(b(1))
print(c(1))
运⾏结果:
<class '__main__.Test'>
<class '__main__.Test2'>
<class '__main__.Test3'>
<__main__.Test object at 0x000001A6A7E88668>
<__main__.Test2 object at 0x000001A6A7E88668>
<__main__.Test3 object at 0x000001A6A7E88668>
  结论:由此可见,python3创建类的时候,可以不带括号,也可以带,也可以显⽰继承object,如果带个()空括号,其实也是隐⼠的继承了object。这三种⽅式是相等的。
  赋值
  上⾯已经讲了类的创建,在讲类的实例化之前,先说⼀下赋值。
  Python 中的变量不需要声明。每个变量在使⽤前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
  等号(=)⽤来给变量赋值。
  等号(=)运算符左边是⼀个变量名,等号(=)运算符右边是存储在变量中的值。例如:
a = None
print(id(a))
print(id(None))
print(a == None)
  运⾏结果:
1625859280
1625859280
True
  结论:可以看出,a赋值了None后,a 与None指向同⼀个内存地址,并且值也相等,所以a == None 是True。
  我之前讲过,python对象三个基本要素:id,value,type。id是对象的唯⼀标识,value对象的值,type标识对象的类型。所有变量即对象。
  上⾯a is None的话,就是通过id来判断,如果是a == None的话,就是通过value来判断。
  类的实例化
  上⾯赋值我们⽤的是“等号”,是针对变量的。其实在讲类的创建,也⽤了“=”号来赋值。
  什么是实例化? “类提供默认⾏为,是实例的⼯⼚”,打个⽐⽅,车是类,别克凯越是类的实例。 
  类的实例化只有⼀种⽅式,就是实例化的时候,需要带括号,这个括号根据实际情况可以为空,也可以传参。看例⼦:
class Test:
def __init__(self,x):
self.x = x
def outprint(self):
return self.x
class Test_1(object):
def __init__(self,x):
self.x = x
def outprint(self):
return self.x
# 给类起⼀个别名
a = Test
# 实例化类
b = Test(1)
# 实例化类
c = Test_1
print(a)
print(a == Test)
print(b)
print(Test(1))
print(id(b))
getattribute方法返回类型print(id(Test(1)))
print(b == Test(1))
print(c)
# 赋值
d = a
print(id(Test))
print(id(a))
print(id(d))
print(a == d)
# 获取当前类的属性列表
print(dir(a))
print(dir(c))
  运⾏结果:
<class '__main__.Test'>
True
<__main__.Test object at 0x00000168B1458630>
<__main__.Test object at 0x00000168B1458668>
1549162350128
1549162350576
False
<class '__main__.Test_1'>
1549339665432
1549339665432
1549339665432
True
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__redu ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__redu Process finished with exit code 0
  结论:我把前⾯的例⼦也写进来了,就是⽅便理解,有点多,但要耐⼼点看。
  上⾯的结果告诉我们:python的类,带括号是实例化,不带括号是赋值。(记住这个)
  总结
 以上内容是⼀个简单的知识点,⼩知识点容易被忽略,不清楚的可以再复习⼀次。
另外,对测试开发,⾃动化测试技术与思想感兴趣的朋友,可以加⼊QQ测开交流:696400122进⾏交流,互相学习与进步。不积跬步⽆以⾄千⾥!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。