WEBVTT

1
00:00:00.520 --> 00:00:01.940
<v Instructor>Hi guys and welcome back.</v>

2
00:00:01.940 --> 00:00:04.600
In this video, we're going to talk about static methods

3
00:00:04.600 --> 00:00:06.140
and class methods.

4
00:00:06.140 --> 00:00:08.990
These can be a little bit confusing so let's get started.

5
00:00:08.990 --> 00:00:12.550
Here, we've got a class that I have called ClassTest.

6
00:00:12.550 --> 00:00:15.040
This is just to show you how these things work.

7
00:00:15.040 --> 00:00:18.160
And then we have defined a method.

8
00:00:18.160 --> 00:00:21.630
We know it's a method because it is a function,

9
00:00:21.630 --> 00:00:23.280
which starts with a def keyword,

10
00:00:23.280 --> 00:00:27.040
and it has self as a first parameter.

11
00:00:27.040 --> 00:00:30.950
All functions inside the class that use the object

12
00:00:30.950 --> 00:00:33.380
as the first parameter,

13
00:00:33.380 --> 00:00:35.673
are called instance methods.

14
00:00:36.770 --> 00:00:38.860
And this instance_method,

15
00:00:38.860 --> 00:00:41.030
prints that you've called the instance_method.

16
00:00:41.030 --> 00:00:44.210
How would you call this method if you wanted to call it?

17
00:00:44.210 --> 00:00:46.640
You have two options.

18
00:00:46.640 --> 00:00:50.610
Okay, the first option is to do something like,

19
00:00:50.610 --> 00:00:55.610
test = ClassTest, and create a new object of type ClassTest.

20
00:00:56.780 --> 00:00:59.780
Notice that we don't have an init method in this class,

21
00:00:59.780 --> 00:01:00.810
but that's okay.

22
00:01:00.810 --> 00:01:02.105
If you don't have an init method,

23
00:01:02.105 --> 00:01:03.071
that just means that you

24
00:01:03.071 --> 00:01:05.380
don't have any initialization to do,

25
00:01:05.380 --> 00:01:08.470
but the self is still created

26
00:01:08.470 --> 00:01:10.310
and you still get a new object.

27
00:01:10.310 --> 00:01:13.050
And make it equal to your variable.

28
00:01:13.050 --> 00:01:14.210
Here, we're creating a new object

29
00:01:14.210 --> 00:01:18.170
and you can do test.instance_method, or as we know it,

30
00:01:18.170 --> 00:01:20.770
you can ClassTest.instance_method

31
00:01:20.770 --> 00:01:22.630
with test as the argument.

32
00:01:22.630 --> 00:01:24.610
Both of these things are exactly the same.

33
00:01:24.610 --> 00:01:27.670
If you run this code, you'll get that you've called

34
00:01:27.670 --> 00:01:30.430
the instance_method of this object.

35
00:01:30.430 --> 00:01:33.770
Notice that we are printing the object self here,

36
00:01:33.770 --> 00:01:35.630
and as we saw earlier on,

37
00:01:35.630 --> 00:01:38.590
you get back this ugly print out.

38
00:01:38.590 --> 00:01:40.470
If you wanted it to be a little bit nicer,

39
00:01:40.470 --> 00:01:44.050
you would have to implement your str or repr methods,

40
00:01:44.050 --> 00:01:45.050
one of the two.

41
00:01:45.050 --> 00:01:49.150
But for now, we have called the instance_method two times.

42
00:01:49.150 --> 00:01:52.800
It is called an instance_method because you call it

43
00:01:52.800 --> 00:01:55.430
on a class instance.

44
00:01:55.430 --> 00:01:58.600
The name instance, it means the same thing, an object.

45
00:01:58.600 --> 00:02:00.980
What we're doing here is we're creating an object

46
00:02:00.980 --> 00:02:01.880
of type ClassTest.

47
00:02:03.220 --> 00:02:04.530
You can also say that you're creating

48
00:02:04.530 --> 00:02:06.410
an instance of ClassTest.

49
00:02:06.410 --> 00:02:08.170
They mean the same thing.

50
00:02:08.170 --> 00:02:10.653
That is why these are called instance methods.

51
00:02:11.750 --> 00:02:16.200
Instance methods need the object in order to call them.

52
00:02:16.200 --> 00:02:20.290
The next type is called a class method.

53
00:02:20.290 --> 00:02:23.280
Here, you can define another method.

54
00:02:23.280 --> 00:02:28.280
But now instead of the instance, or the object, self,

55
00:02:28.360 --> 00:02:31.000
it actually takes a different parameter

56
00:02:31.000 --> 00:02:33.610
that we usually in Python, call cls,

57
00:02:33.610 --> 00:02:35.550
but you can call this parameter whatever you want,

58
00:02:35.550 --> 00:02:37.470
the value will still be the same no matter

59
00:02:37.470 --> 00:02:39.520
what you call this parameter.

60
00:02:39.520 --> 00:02:42.740
What this parameter will be in a class method,

61
00:02:42.740 --> 00:02:45.870
that is when you put this at @classmethod on top

62
00:02:45.870 --> 00:02:50.573
of the method definition, is this will be the class itself.

63
00:02:51.930 --> 00:02:54.510
Let me show you how this works.

64
00:02:54.510 --> 00:02:57.380
Called class_method of {cls}.

65
00:02:57.380 --> 00:02:59.740
I'll just print the parameter there,

66
00:02:59.740 --> 00:03:02.130
and then, because it is a class method,

67
00:03:02.130 --> 00:03:03.370
it's not an instance method,

68
00:03:03.370 --> 00:03:05.480
you no longer need an instance.

69
00:03:05.480 --> 00:03:06.800
That means that you can just do,

70
00:03:06.800 --> 00:03:10.960
ClassTest.class_method, and that's it,

71
00:03:10.960 --> 00:03:13.040
you don't have to pass in anything in there

72
00:03:13.040 --> 00:03:16.080
because we no longer need the object.

73
00:03:16.080 --> 00:03:17.980
Python is smart enough that when you do

74
00:03:17.980 --> 00:03:21.820
ClassTest.class_method and you don't pass anything in there,

75
00:03:21.820 --> 00:03:25.940
Python will actually pass ClassTest in there.

76
00:03:25.940 --> 00:03:29.920
So, actually cls is ClassTest,

77
00:03:29.920 --> 00:03:32.443
because that is what you called the method on.

78
00:03:33.520 --> 00:03:34.620
That is how this works.

79
00:03:34.620 --> 00:03:36.650
When you do ClassTest.class_method,

80
00:03:36.650 --> 00:03:40.040
given that you have put this @classmethod on top.

81
00:03:40.040 --> 00:03:41.710
We're going to learn what this is later on.

82
00:03:41.710 --> 00:03:43.450
Don't worry about it too much.

83
00:03:43.450 --> 00:03:47.600
Then Python will pass in the class as the argument

84
00:03:47.600 --> 00:03:48.793
to this parameter.

85
00:03:49.740 --> 00:03:52.110
If we save and play,

86
00:03:52.110 --> 00:03:53.910
you'll see that now you get that you've called

87
00:03:53.910 --> 00:03:58.120
the class_method of this class called ClassTest.

88
00:03:58.120 --> 00:04:00.760
Don't worry too much about the __main__,

89
00:04:00.760 --> 00:04:03.370
we will learn about that later on if it becomes relevant.

90
00:04:03.370 --> 00:04:06.160
It's largely irrelevant to most Python programmes.

91
00:04:06.160 --> 00:04:08.430
This just means that you've called the class_method

92
00:04:08.430 --> 00:04:09.690
of this class.

93
00:04:09.690 --> 00:04:11.850
We're going to find used cases for class_methods

94
00:04:11.850 --> 00:04:14.220
in just a little bit later on in this video.

95
00:04:14.220 --> 00:04:17.510
Finally, the last option is the @staticmethod.

96
00:04:18.426 --> 00:04:21.804
And this defines a static method that I'm going to call

97
00:04:21.804 --> 00:04:22.760
static_method.

98
00:04:22.760 --> 00:04:24.340
Again, you can call it whatever you want

99
00:04:24.340 --> 00:04:28.580
and now I'm not going to put anything inside the brackets.

100
00:04:28.580 --> 00:04:31.993
Here, we're going to do "Called static_method."

101
00:04:32.950 --> 00:04:35.880
In a static method, that is a method

102
00:04:35.880 --> 00:04:39.370
that doesn't have a parameter cls or self,

103
00:04:39.370 --> 00:04:42.370
and that has @staticmethod on top.

104
00:04:42.370 --> 00:04:45.710
These methods don't get anything when you call them.

105
00:04:45.710 --> 00:04:48.210
The class method gets the class normally

106
00:04:48.210 --> 00:04:50.090
and you can print it out or use it.

107
00:04:50.090 --> 00:04:52.900
The instance_methods gets the instance or the object

108
00:04:52.900 --> 00:04:55.360
and you can print it out or use it in them.

109
00:04:55.360 --> 00:04:58.560
But static methods don't get either of those things.

110
00:04:58.560 --> 00:05:00.710
And you can call them in the same way

111
00:05:00.710 --> 00:05:03.720
just by doing static_method inside ClassTest

112
00:05:03.720 --> 00:05:07.330
or ClassTest.static_method but Python will not put

113
00:05:07.330 --> 00:05:09.040
the ClassTest in the brackets.

114
00:05:09.040 --> 00:05:11.140
It will just call that method.

115
00:05:11.140 --> 00:05:13.480
This really isn't a method.

116
00:05:13.480 --> 00:05:16.710
It's just a function that you've placed inside a class.

117
00:05:16.710 --> 00:05:18.840
We should still call it a method but it doesn't have

118
00:05:18.840 --> 00:05:21.630
any information about the class or the object

119
00:05:21.630 --> 00:05:24.560
so it's really just its own separate function

120
00:05:24.560 --> 00:05:26.800
that lives inside the class.

121
00:05:26.800 --> 00:05:29.400
If you want a function inside the class

122
00:05:29.400 --> 00:05:31.410
that doesn't use the class for anything,

123
00:05:31.410 --> 00:05:35.630
or the instance, you can decorate it with @staticmethod.

124
00:05:35.630 --> 00:05:38.600
If you want a method that uses the class for something,

125
00:05:38.600 --> 00:05:41.500
then you can decorate it @classmethod.

126
00:05:41.500 --> 00:05:42.960
And if you want to use the object,

127
00:05:42.960 --> 00:05:45.820
or if you wanna create any other type of instance_method,

128
00:05:45.820 --> 00:05:47.940
then just don't put anything on top.

129
00:05:47.940 --> 00:05:50.240
No @classmethod or @staticmethod

130
00:05:50.240 --> 00:05:52.610
and make sure to include your parameter there.

131
00:05:52.610 --> 00:05:55.010
Again, if you call this like that and you press play,

132
00:05:55.010 --> 00:05:57.720
you just get Called static_method.

133
00:05:57.720 --> 00:05:59.683
So, what are these used for?

134
00:06:00.530 --> 00:06:02.880
Instance methods are used for most things.

135
00:06:02.880 --> 00:06:05.800
When you wanna produce an action that uses the data

136
00:06:05.800 --> 00:06:08.340
inside the object that you created earlier on for example,

137
00:06:08.340 --> 00:06:11.230
that is when instance methods would get used.

138
00:06:11.230 --> 00:06:13.620
Also, if you wanna call a method to modify

139
00:06:13.620 --> 00:06:16.110
some sort of data inside self or the object,

140
00:06:16.110 --> 00:06:17.840
then you would also use an instance method.

141
00:06:17.840 --> 00:06:21.930
Class methods are used often as factories

142
00:06:21.930 --> 00:06:24.130
and I'm going to show you what that is in a second.

143
00:06:24.130 --> 00:06:27.570
And finally, static_methods are used to just place a method

144
00:06:27.570 --> 00:06:28.670
inside a class.

145
00:06:28.670 --> 00:06:31.270
Because you feel like it belongs there for some reason.

146
00:06:31.270 --> 00:06:33.330
For you as a developer, you wanna put that method in there

147
00:06:33.330 --> 00:06:36.920
because it makes sense logically for code organisation

148
00:06:36.920 --> 00:06:39.410
or something like that, then you can use that.

149
00:06:39.410 --> 00:06:41.040
I'll say though that most of the time,

150
00:06:41.040 --> 00:06:43.610
you'll be using class methods and instance methods.

151
00:06:43.610 --> 00:06:46.010
You won't be using static methods all that much.

152
00:06:46.900 --> 00:06:49.570
Let's start with our factory example

153
00:06:49.570 --> 00:06:52.440
that is going to show you how you might use a class method.

154
00:06:52.440 --> 00:06:54.610
This example is gonna be a little bit tricky

155
00:06:54.610 --> 00:06:56.010
so please bear with me for a second

156
00:06:56.010 --> 00:06:58.930
while I explain first what I've done here.

157
00:06:58.930 --> 00:07:01.290
In a class, as well as methods,

158
00:07:01.290 --> 00:07:03.670
you can also put variables

159
00:07:03.670 --> 00:07:06.610
and these become class properties.

160
00:07:06.610 --> 00:07:10.270
If you wanted to print out this tuple here,

161
00:07:10.270 --> 00:07:13.680
all you have to do is access the TYPES tuple

162
00:07:13.680 --> 00:07:15.660
inside the Book class.

163
00:07:15.660 --> 00:07:18.690
You would do Book.TYPES,

164
00:07:18.690 --> 00:07:20.930
and that is how you access this tuple there.

165
00:07:20.930 --> 00:07:22.090
You can print it out

166
00:07:22.090 --> 00:07:24.793
and you can see that you get hardcover and paperback.

167
00:07:25.750 --> 00:07:29.130
We have some data stored inside the class,

168
00:07:29.130 --> 00:07:30.400
which is this tuple here,

169
00:07:30.400 --> 00:07:33.290
and a reason why you might put some data inside a class,

170
00:07:33.290 --> 00:07:35.650
as opposed to putting it outside the class,

171
00:07:35.650 --> 00:07:37.650
is because you feel like it belongs there

172
00:07:37.650 --> 00:07:40.030
or only the Book class is going to use it,

173
00:07:40.030 --> 00:07:41.820
or maybe there is some sort of reason,

174
00:07:41.820 --> 00:07:44.410
logical reason to put that data in there.

175
00:07:44.410 --> 00:07:46.950
Here I'm creating a class that talks about Books.

176
00:07:46.950 --> 00:07:50.053
So, it makes sense to have book types inside there.

177
00:07:51.040 --> 00:07:53.690
Then we're going to create an init method for this class.

178
00:07:53.690 --> 00:07:55.660
Remember, because this is an instance method

179
00:07:55.660 --> 00:07:57.920
it creates an instance and gives it back to you,

180
00:07:57.920 --> 00:07:59.720
you need the self parameter there.

181
00:07:59.720 --> 00:08:01.830
You can call self whatever you want, once again,

182
00:08:01.830 --> 00:08:04.130
but the convention in Python is to call it self.

183
00:08:04.130 --> 00:08:06.610
And then we're going to be creating objects

184
00:08:06.610 --> 00:08:09.280
of type Book that have three things.

185
00:08:09.280 --> 00:08:12.570
A name, a book type, and a weight.

186
00:08:12.570 --> 00:08:14.850
So, we will do self.name = name,

187
00:08:14.850 --> 00:08:16.183
Self.book_type = book_type,

188
00:08:17.610 --> 00:08:19.470
and self.weight = weight.

189
00:08:19.470 --> 00:08:21.460
This is a very common thing in Python

190
00:08:21.460 --> 00:08:23.640
to create an object with three different values

191
00:08:23.640 --> 00:08:26.280
that you then store each one inside a property

192
00:08:26.280 --> 00:08:27.970
of the object itself.

193
00:08:27.970 --> 00:08:30.070
Just to recap, if you were to create a variable

194
00:08:30.070 --> 00:08:32.260
such as Book, and make it an object,

195
00:08:32.260 --> 00:08:35.410
then you will need to pass in some information,

196
00:08:35.410 --> 00:08:39.230
let's say, "Harry Potter", "hardcover", and 1500,

197
00:08:39.230 --> 00:08:42.200
then you can print book.name

198
00:08:42.200 --> 00:08:43.640
and what that's going to do is it's going

199
00:08:43.640 --> 00:08:47.210
to pass in "Harry Potter" as the value for this parameter.

200
00:08:47.210 --> 00:08:50.040
Then that is going to be assigned to the name property

201
00:08:50.040 --> 00:08:52.400
of the self object, which is essentially

202
00:08:52.400 --> 00:08:54.730
an empty container at this stage,

203
00:08:54.730 --> 00:08:56.810
and then we're going to print it out down here.

204
00:08:56.810 --> 00:08:58.340
So if we press play,

205
00:08:58.340 --> 00:08:59.820
you'll see that "Harry Potter" comes out.

206
00:08:59.820 --> 00:09:01.560
That's how the data is flowing through

207
00:09:01.560 --> 00:09:03.730
this system at this stage.

208
00:09:03.730 --> 00:09:05.990
Then I'm also going to create a repr method

209
00:09:05.990 --> 00:09:07.040
so that it's a little bit easier

210
00:09:07.040 --> 00:09:08.660
to work with these books.

211
00:09:08.660 --> 00:09:12.430
And we are going to return a Book with this name.

212
00:09:12.430 --> 00:09:13.800
It is this Book type

213
00:09:13.800 --> 00:09:18.590
and it's weighing {self.weight}g&gt;.

214
00:09:18.590 --> 00:09:22.170
This is a representation of the book that would allow us,

215
00:09:22.170 --> 00:09:25.050
with all the data included inside,

216
00:09:25.050 --> 00:09:27.440
to recreate a book object if we wanted to.

217
00:09:27.440 --> 00:09:29.920
Remember, that is the purpose of the repr method.

218
00:09:29.920 --> 00:09:32.090
If you wanted to just print the book out nicely

219
00:09:32.090 --> 00:09:33.420
for users to read,

220
00:09:33.420 --> 00:09:36.500
then you could use the str method instead.

221
00:09:36.500 --> 00:09:37.930
Now instead of putting in book.name,

222
00:09:37.930 --> 00:09:40.780
we're just going to print book and I will press play

223
00:09:40.780 --> 00:09:42.390
and show you what the output is.

224
00:09:42.390 --> 00:09:43.747
Here's the book, "Harry Potter."

225
00:09:43.747 --> 00:09:47.190
It's a hardcover, weighing 1500 grammes.

226
00:09:47.190 --> 00:09:51.030
Now we come into the factories.

227
00:09:51.030 --> 00:09:52.810
Here's where we're gonna use class_methods.

228
00:09:52.810 --> 00:09:56.660
I wanna avoid, when I'm creating a new book object,

229
00:09:56.660 --> 00:09:58.400
when I'm calling the init method,

230
00:09:58.400 --> 00:10:01.910
I want to avoid passing in this "hardcover" string

231
00:10:01.910 --> 00:10:04.290
because I only want to be able to create books

232
00:10:04.290 --> 00:10:06.760
that are either hardcover or paperback,

233
00:10:06.760 --> 00:10:08.810
I wanna make sure that when I create a book,

234
00:10:08.810 --> 00:10:11.220
I use one of these two types.

235
00:10:11.220 --> 00:10:15.090
Right now, I can pass in comic book if I wanted to here

236
00:10:15.090 --> 00:10:17.840
and that would be totally fine because again,

237
00:10:17.840 --> 00:10:20.990
the data, this string here, becomes the value of book_type.

238
00:10:20.990 --> 00:10:23.470
Book_type gets assigned to self.book_type,

239
00:10:23.470 --> 00:10:24.580
and that gets used down here.

240
00:10:24.580 --> 00:10:26.770
There is no check for this,

241
00:10:26.770 --> 00:10:28.703
nothing is using this at the moment.

242
00:10:29.610 --> 00:10:32.920
What I'm going to do is I'm going to create a method

243
00:10:32.920 --> 00:10:36.360
that will take in the name and the weight

244
00:10:36.360 --> 00:10:40.340
and will create a new book object of type hardcover.

245
00:10:40.340 --> 00:10:44.063
I'm going to call this @classmethod hardcover,

246
00:10:45.450 --> 00:10:46.940
and again, because it is a class method,

247
00:10:46.940 --> 00:10:49.170
it takes in the class as the first parameter,

248
00:10:49.170 --> 00:10:51.080
usually called that cls in Python.

249
00:10:51.080 --> 00:10:53.220
And that is going to take in the name

250
00:10:53.220 --> 00:10:55.370
and the page weight,

251
00:10:55.370 --> 00:10:59.500
and what it's going to do is it is going to return a book

252
00:10:59.500 --> 00:11:02.310
with the name as the first argument,

253
00:11:02.310 --> 00:11:04.030
which then goes into the init method.

254
00:11:04.030 --> 00:11:09.030
Book.TYPES[0] as the second argument.

255
00:11:09.680 --> 00:11:12.180
Remember, Book.TYPES gives us this tuple.

256
00:11:12.180 --> 00:11:15.700
Book.TYPES[0] gives us the hardcover.

257
00:11:15.700 --> 00:11:18.957
And finally, the page_weight + 100

258
00:11:19.901 --> 00:11:21.940
for the weight of the book.

259
00:11:21.940 --> 00:11:23.690
I'm adding 100 because it's a hardcover

260
00:11:23.690 --> 00:11:25.290
so it's probably going to be a little heavier

261
00:11:25.290 --> 00:11:26.810
than a paperback.

262
00:11:26.810 --> 00:11:27.870
Hopefully this makes sense.

263
00:11:27.870 --> 00:11:30.710
It is a little bit confusing because you are using

264
00:11:30.710 --> 00:11:35.080
the class inside a method defined inside the class.

265
00:11:35.080 --> 00:11:36.750
Which I know is a little bit weird,

266
00:11:36.750 --> 00:11:40.700
but that is how you can create a new object

267
00:11:40.700 --> 00:11:42.233
inside of a class.

268
00:11:42.233 --> 00:11:44.630
This is something you can totally do.

269
00:11:44.630 --> 00:11:46.060
And because it is a class method,

270
00:11:46.060 --> 00:11:48.860
you no longer need to create your own object first.

271
00:11:48.860 --> 00:11:49.860
All you have to do now is say,

272
00:11:49.860 --> 00:11:53.640
Book.hardcover and pass in here "Harry Potter"

273
00:11:53.640 --> 00:11:56.370
and the page weight which was 1500.

274
00:11:56.370 --> 00:11:59.650
Notice that this hardcover method takes in the name

275
00:11:59.650 --> 00:12:02.360
and the page weight but it does not take in a type.

276
00:12:02.360 --> 00:12:04.730
The type is added inside the method,

277
00:12:04.730 --> 00:12:07.520
you don't have to pass it in as an argument.

278
00:12:07.520 --> 00:12:09.240
If I save and run that,

279
00:12:09.240 --> 00:12:11.130
you can see that now you get a book "Harry Potter,"

280
00:12:11.130 --> 00:12:13.770
which is a hardcover, and weighs 1600 grammes.

281
00:12:13.770 --> 00:12:17.230
Let's do the same thing for the paperback.

282
00:12:17.230 --> 00:12:18.860
Only now instead of Book.TYPES[0],

283
00:12:18.860 --> 00:12:20.330
I'm going to do Book.TYPES[1]

284
00:12:20.330 --> 00:12:22.853
and I'm going to remove this + 100.

285
00:12:23.740 --> 00:12:26.070
So now, if we wanted to create a softcover book,

286
00:12:26.070 --> 00:12:27.630
or a paperback, you can say something like,

287
00:12:27.630 --> 00:12:30.147
light = Book.paperback("Python 101"),

288
00:12:31.220 --> 00:12:33.360
and you can say for example, 600.

289
00:12:33.360 --> 00:12:35.890
If you then print the light book as well,

290
00:12:35.890 --> 00:12:38.460
you'll see that you get two books printed out now.

291
00:12:38.460 --> 00:12:41.290
Book "Harry Potter," which is hardcover, weighing 1600 grammes

292
00:12:41.290 --> 00:12:43.440
and Book "Python 101," which is a paperback,

293
00:12:43.440 --> 00:12:45.190
weighing 600 grammes.

294
00:12:45.190 --> 00:12:49.390
This is a very, very common way of using class methods

295
00:12:49.390 --> 00:12:51.700
because you have access to the class itself

296
00:12:51.700 --> 00:12:54.790
inside the method, that means that it is a perfect place

297
00:12:54.790 --> 00:12:59.500
to be creating new objects by using that class.

298
00:12:59.500 --> 00:13:01.850
With that said though, notice that I'm using Book here

299
00:13:01.850 --> 00:13:03.810
and I'm not using cls anywhere.

300
00:13:03.810 --> 00:13:07.580
Book is the class as we saw earlier on.

301
00:13:07.580 --> 00:13:10.300
And cls is also the class.

302
00:13:10.300 --> 00:13:11.950
They are interchangeable.

303
00:13:11.950 --> 00:13:15.590
Instead of Book, you can put cls in there.

304
00:13:15.590 --> 00:13:19.230
And instead of Book down here, you can put cls in there.

305
00:13:19.230 --> 00:13:20.700
You should do that.

306
00:13:20.700 --> 00:13:24.490
Use cls instead of Book and that will come in handy

307
00:13:24.490 --> 00:13:26.510
when you look at inheritance,

308
00:13:26.510 --> 00:13:28.330
which we will look at later on.

309
00:13:28.330 --> 00:13:30.420
Just because using cls gives you a little bit more

310
00:13:30.420 --> 00:13:32.650
flexibility down the line.

311
00:13:32.650 --> 00:13:35.670
Do use cls there since you've got access to it

312
00:13:35.670 --> 00:13:37.960
and if you were creating a static method

313
00:13:37.960 --> 00:13:39.050
instead of a class method,

314
00:13:39.050 --> 00:13:40.820
you would have to use book class

315
00:13:40.820 --> 00:13:42.680
because you wouldn't have cls.

316
00:13:42.680 --> 00:13:45.150
If you want to use cls use a class method,

317
00:13:45.150 --> 00:13:48.450
use the paramter, and you can create new objects

318
00:13:48.450 --> 00:13:50.810
and return them or use them however you like.

319
00:13:50.810 --> 00:13:52.460
Hopefully this makes sense.

320
00:13:52.460 --> 00:13:54.360
I know that it's a little bit confusing

321
00:13:54.360 --> 00:13:56.400
looking at class methods and static methods

322
00:13:56.400 --> 00:13:57.930
and it's been a bit of a long video

323
00:13:57.930 --> 00:13:59.630
but hopefully it was helpful.

324
00:13:59.630 --> 00:14:02.280
Hope you enjoyed it and I'll see you in the next one.

