Python中类-带括号与不带括号的区别

 

  引言

  有时候看到群里一些人问一些基础的知识,虽然很基础,网上随便一查即可知道,但是往往很多人就是连这些基础的知识都很模糊,甚至不清楚,这里再来复习一下python中类的一个知识点(仅此)。

  类的定义

  用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

  举个生活栗子,一个公司可以看作一个类,公司下的部门,可以方法,公司有很多不同级别的领导,可以看作是属性,部门可以有很多,领导可以是BOSS,也可以是小部门的领导。所以一个类下面可以有多个方法和多个属性,属性可以只属于某个方法,也可以是全局的。

  类的创建

  python3创建类的方式有两种,一种带括号,一种不带括号。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

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))

  

运行结果:

1

2

3

4

5

6

<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 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

  等号(=)用来给变量赋值。

  等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:

  

1

2

3

4

a = None

print(id(a))

print(id(None))

print(a == None)

  

  运行结果:

1

2

3

1625859280

1625859280

True

  结论:可以看出,a赋值了None后,a 与None指向同一个内存地址,并且值也相等,所以a == None 是True。

  我之前讲过,python对象三个基本要素:id,value,type。id是对象的唯一标识,value对象的值,type标识对象的类型。所有变量即对象。

  上面a is None的话,就是通过id来判断,如果是a == None的话,就是通过value来判断。

 

  类的实例化

  上面赋值我们用的是“等号”,是针对变量的。其实在讲类的创建,也用了“=”号来赋值。

  什么是实例化? “类提供默认行为,是实例的工厂”,打个比方,车是类,别克凯越是类的实例。  

  类的实例化只有一种方式,就是实例化的时候,需要带括号,这个括号根据实际情况可以为空,也可以传参。看例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

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))

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))

  

  运行结果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<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__''__reduce__''__reduce_ex__''__repr__''__setattr__''__sizeof__''__str__''__subclasshook__''__weakref__''outprint']

['__class__''__delattr__''__dict__''__dir__''__doc__''__eq__''__format__''__ge__''__getattribute__''__gt__''__hash__''__init__''__init_subclass__''__le__''__lt__''__module__''__ne__''__new__''__reduce__''__reduce_ex__''__repr__''__setattr__''__sizeof__''__str__''__subclasshook__''__weakref__''outprint']

 

Process finished with exit code 0

  

  结论:我把前面的例子也写进来了,就是方便理解,有点多,但要耐心点看。

  上面的结果告诉我们:python的类,带括号是实例化,不带括号是赋值。(记住这个)

 

  总结

 以上内容是一个简单的知识点,小知识点容易被忽略,不清楚的可以再复习一次。

另外,对测试开发,自动化测试技术与思想感兴趣的朋友,可以加入QQ测开交流群:696400122进行交流,互相学习与进步。不积跬步无以至千里!

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值