Đây là một bài viết về các lớp con Python và kế thừa. Trước khi đọc tiếp, nếu bạn đã thực hiện như vậy, tôi thực sự khuyên bạn nên xem bài viết của tôi trên các lớp Python.
Chúng ta hãy nứt!
Một phụ con python là gì?
Hãy nói rằng bạn có một lớp học đã được thiết lập. Trong bài viết trước của tôi về các lớp học, tôi đã tạo ra những gì tôi sẽ đề cập đến như một lớp người cấp một tầng của người Viking. Đó là, bạn sử dụng lớp Person
để tạo đối tượng một người. Đó là nó. [Tôi đã tạo Bob bằng lớp này. Muahaha!].
Điều gì sẽ xảy ra nếu tôi muốn có một số chiều sâu hơn mặc dù? Hãy để sử dụng phương tiện làm ví dụ. Tôi sẽ nhận được thực sự đơn giản ở đây.
Xe> Xe> Mercedes.
Thấy điều đó? Bây giờ chúng ta nói chuyện! Nhiều cấp độ! Vehicle
sẽ là lớp cha, Car
sẽ là lớp con và
class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
0 sẽ là một đối tượng chúng tôi tạo bằng lớp con Car
.Subclass and class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
0 would be an object we create using the Car
subclass.Không chỉ vậy, mà Mercedes chúng tôi vừa tạo sẽ kế thừa tất cả các thuộc tính và hàm được liên kết với lớp cha Vehicle
và các thuộc tính từ lớp Car
.
Đó là, Mercedes sẽ được coi là một chiếc xe ô tô ở chỗ nó có bốn bánh xe và kính chắn gió trái ngược với một chiếc xe máy chỉ có hai bánh xe và kính chắn gió nhỏ. Cả xe và xe máy đều là phương tiện nhưng chỉ có hai loại xe khác nhau. Hiểu rồi?
Một ví dụ quen thuộc
Mã đầy đủ ở đây.
Để chứng minh điều này trong mã, tôi đã viết một lớp
class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
4. Hãy để đối mặt với nó, tất cả chúng ta đã có một công việc tại một số điểm trong cuộc sống của chúng ta. Nó cũng có nhiều khả năng là chúng tôi đã đối phó với các ông chủ và người quản lý tốt và xấu trên đường đi.Hãy tưởng tượng nếu bạn muốn, một trò chơi với một ông chủ trong đó. Tôi có thể tưởng tượng mình mã hóa một lớp Boss tương tự như bên dưới. Sau đó, tôi đã sử dụng mã này để tạo các loại ông chủ khác nhau:
class Boss[object]:
def __init__[self, name, attitude, behaviour, face]:
self.name = name
self.attitude = attitude
self.behaviour = behaviour
self.face = face
def get_attitude[self]:
return self.attitude
def get_behaviour[self]:
return self.behaviour
def get_face[self]:
return self.face
Một lời giải thích đầy đủ về một lớp học được viết như thế này được tìm thấy trong bài viết của các lớp Python của tôi.
Một ông chủ sẽ có
class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
5, class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
6, class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
7 và class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
8 [Biểu cảm khuôn mặt!].Bây giờ, hãy để bắt đầu làm việc trên các lớp con trùm. Những loại ông chủ nào chúng ta muốn có thể thực hiện? Làm thế nào về một
class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
9 và def nurture_talent[self]:
#A good boss nurtures talent making employees happy!
print["The employees feel all warm and fuzzy then put their talents to good use."]
def encourage[self]:
#A good boss encourages their employees!
print["The team cheers, starts shouting awesome slogans then gets back to work."]
0?class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
Tôi đã làm gì ở đây? Nó rất giống với mã hóa lớp cha. Lưu ý sự khác biệt mặc dù:
Chúng tôi bắt đầu bằng cách xác định lớp con
9. Hãy xem làm thế nào mà nó có được Boss Boss giữa các dấu ngoặc? Đó là vì chúng tôi xác định một đối tượngclass GoodBoss[Boss]: def __init__[self, name, attitude, behaviour, face]: super[].__init__[name, attitude, behaviour, face]
9,class GoodBoss[Boss]: def __init__[self, name, attitude, behaviour, face]: super[].__init__[name, attitude, behaviour, face]
4. Điều này sẽ đảm bảo lớpclass GoodBoss[Boss]: def __init__[self, name, attitude, behaviour, face]: super[].__init__[name, attitude, behaviour, face]
9 kế thừa mọi thứ từ lớpclass GoodBoss[Boss]: def __init__[self, name, attitude, behaviour, face]: super[].__init__[name, attitude, behaviour, face]
4.class GoodBoss[Boss]: def __init__[self, name, attitude, behaviour, face]: super[].__init__[name, attitude, behaviour, face]
Trong phần ban đầu, chúng ta phải chỉ định
6 cũng như tất cả các thuộc tính được xác định trong lớp cha mẹdef nurture_talent[self]: #A good boss nurtures talent making employees happy! print["The employees feel all warm and fuzzy then put their talents to good use."] def encourage[self]: #A good boss encourages their employees! print["The team cheers, starts shouting awesome slogans then gets back to work."]
4. Sau đó, chúng ta có thể thêm bất cứ thứ gì ‘Goodboss, các thuộc tính độc đáo mà chúng ta muốn, chẳng hạn như thuộc tính của một người cười [những ông chủ tốt cười phải không?]. Trong trường hợp này, tôi không thêm bất kỳ, do đó, thuộc tính cuối cùng bạn thấy làclass GoodBoss[Boss]: def __init__[self, name, attitude, behaviour, face]: super[].__init__[name, attitude, behaviour, face]
8.add whatever ‘GoodBoss’ unique attributes we want, such as a “laugh” attribute [good bosses laugh right?]. In this case, I’m not adding any, thus the last attribute you see isclass GoodBoss[Boss]: def __init__[self, name, attitude, behaviour, face]: super[].__init__[name, attitude, behaviour, face]
8.class GoodBoss[Boss]: def __init__[self, name, attitude, behaviour, face]: super[].__init__[name, attitude, behaviour, face]
Tuyên bố
9 có lẽ là khó hiểu nhất. Nó liên quan đến sự kế thừa từ lớp cơ sở.def nurture_talent[self]: #A good boss nurtures talent making employees happy! print["The employees feel all warm and fuzzy then put their talents to good use."] def encourage[self]: #A good boss encourages their employees! print["The team cheers, starts shouting awesome slogans then gets back to work."]
Tôi đã làm cho bạn một sự bất đồng khi cố gắng giải thích Super [] trong một điểm đạn vì vậy tôi sẽ hướng dẫn bạn đến nơi tôi đọc về nó. Câu trả lời thứ 3 trong chủ đề Overflow Stack này là tuyệt vời như bài viết của chương trình này.
Phew! Được chứ. Tiếp theo, chúng ta có thể xác định một số chức năng lớp cụ thể của Goodboss. Chúng chỉ có thể được sử dụng bởi một đối tượng được tạo bằng lớp
class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
9:def nurture_talent[self]:
#A good boss nurtures talent making employees happy!
print["The employees feel all warm and fuzzy then put their talents to good use."]
def encourage[self]:
#A good boss encourages their employees!
print["The team cheers, starts shouting awesome slogans then gets back to work."]
Một ông chủ tốt làm gì? Anh ấy/cô ấy nuôi dưỡng tài năng để giúp nhân viên phát triển! Họ cũng khuyến khích các đội của họ giữ cho họ có động lực!
Hai chức năng lớp này chỉ đơn giản là in ra thông báo được chỉ định khi được gọi. Nếu đây là một trò chơi, thay vì chỉ in, chúng ta có thể có các chức năng này thực hiện các giao dịch như tăng
from boss_class import Boss, GoodBoss, BadBoss
1 thêm 20 điểm, hoặc một cái gì đó tương tự.Theo cách tương tự, chúng ta có thể xác định một lớp con
def nurture_talent[self]:
#A good boss nurtures talent making employees happy!
print["The employees feel all warm and fuzzy then put their talents to good use."]
def encourage[self]:
#A good boss encourages their employees!
print["The team cheers, starts shouting awesome slogans then gets back to work."]
0. Bạn có thể tìm thấy mã lớp con def nurture_talent[self]:
#A good boss nurtures talent making employees happy!
print["The employees feel all warm and fuzzy then put their talents to good use."]
def encourage[self]:
#A good boss encourages their employees!
print["The team cheers, starts shouting awesome slogans then gets back to work."]
0 trong repo mã của chúng tôi ở đây.Ai là ông chủ ?!
Thời gian cho một số niềm vui! Tôi sẽ là ông chủ tốt, Bob có thể là ông chủ xấu. [Xin lỗi anh trai!]. Cách dễ nhất để kiểm tra điều này là nhập mã vào vỏ tương tác.
The easiest way to test this out is to import the code into the interactive shell.
Tôi đã có một tập tin gọi là
from boss_class import Boss, GoodBoss, BadBoss
4. Tôi đã bắt đầu vỏ Python từ cùng một thư mục mà kịch bản sống.from boss_class import Boss, GoodBoss, BadBoss
Sau khi được nhập, chúng tôi có thể tạo một tiêu chuẩn của người Viking
class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
4, class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
9 hoặc def nurture_talent[self]:
#A good boss nurtures talent making employees happy!
print["The employees feel all warm and fuzzy then put their talents to good use."]
def encourage[self]:
#A good boss encourages their employees!
print["The team cheers, starts shouting awesome slogans then gets back to work."]
0. Hãy để bắt đầu với người tốt!julian = GoodBoss["Julian", "Positive", "Sociable", "Smiling"]
Sau đó, chúng ta có thể sử dụng các chức năng lớp được liên kết với cả lớp
class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
4 và lớp con class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
9:julian.attitude
‘Positive’
julian.get_behaviour[]
‘Sociable’
julian.nurture_talent[]
The employees feel all warm and fuzzy then put their talents to good use.
Tôi ước tôi thực sự có tác dụng đó đối với mọi người! Ngoài ra, đây là kế thừa trong hành động! Chúng tôi đã thừa hưởng chức năng
julian = GoodBoss["Julian", "Positive", "Sociable", "Smiling"]
0 từ lớp class GoodBoss[Boss]:
def __init__[self,
name,
attitude,
behaviour,
face]:
super[].__init__[name, attitude, behaviour, face]
4! Woohoo!Kết thúc ở mức thấp
Tôi biết chúng tôi đã có một cuộn nhưng những ông chủ xấu luôn có cách hủy hoại mọi thứ:
bob = BadBoss["Bob", “Crazy”, "Anti-Social", "Scowl of Hate"]
bob.face
'Scowl of Hate'
bob.get_attitude[]
‘Crazy’
bob.hoard_praise[]
The employees feel cheated and start plotting Bob's demise while he stares at his own reflection.
bob.yell[]
Everyone stares while Bob yells. Someone shouts, 'Won't somebody PLEASE think of the children?!’
Bob storms off, everyone comforts the victim and one person offers to arrange an 'accident' for Bob.
Tuyên bố miễn trừ trách nhiệm: Tôi yêu Bob [tất cả chúng ta đều biết anh ấy là điều tốt nhất kể từ khi cắt lát bánh mì!]. Tôi cũng yêu các lớp phủ AWS của tôi.
Sự kết luận
Làm thế nào tuyệt vời là các lớp học, lớp con và kế thừa ?!
Điều này không chỉ giúp tôi lên kế hoạch tốt hơn với mã của mình mà còn cho phép tôi đánh giá cao hơn mã khác. Tôi chỉ có thể tưởng tượng có bao nhiêu lớp học và các lớp con tồn tại trong các trò chơi video [ví dụ thế giới của Warcraft!].
Một khi bạn hiểu được chúng, các lớp học thực sự khá dễ sử dụng. Họ là một loạt các mẫu và quên các mẫu/bản thiết kế để bạn gọi bất cứ lúc nào. Ôi những khả năng của bạn Yum!
Oh và nói về các mẫu. Tôi đã tạo một mẫu khung/lớp trống và mẫu phân lớp cho ngày 77 trong số 100 ngày thử thách mã của chúng tôi. Kiểm tra nó ở đây!
Giữ bình tĩnh và mã trong Python!
- Julian
[PSST! Có ai nhận được tài liệu tham khảo Simpsons không?]