プログラミング-運動20 b - OOP概念
15155 ワード
Read the code - relax, that is all there is to it - coding
OOP概念
いくつかの概念はすべてのOO言語でOOPを通して実行されます:
We shall only consider the creation of classes, inheritance and polymorphism.
ノート
これらのOOP概念はすべてのオブジェクト指向プログラミング言語を通してカットされます、しかし、実装は全く異なります.
遺産
継承は、2つ目のクラスに対して再度、プロパティとメソッドを再度書き直すことなく、別のクラスのオブジェクト(オブジェクトの)属性とメソッドを複製/拡張/継承/変更することを可能にします.現在生産されているいくつかのアイテム/製品について考えてください.あなたは、オリジナルの異なるバージョンがあることに気付きます.したがって、バージョン1、2、3などがあると言います.バージョン2、3、および他はどうやって来ましたか?同社はV 1を開発し、後にV 2を始めた?またはV 2でV 2を得るためにV 2を得るためにV 1をむしろ改善しました.さて、これらの2つは実際に可能です、後者のアプローチは解決です.V 2を得るためにV 1のように改善されている後者のアプローチは最高に働き、リソースを節約する.
V 1はV 2に成長します、そして、それは遺産か何かです.
相続の構造
私たちには2つのクラスがあり、これらの2つのクラスのうちの1つは他のクラスの属性と方法を使用したいと思います.を作成しましょう
Animal class
とCat class
, どこCat
継承するAnimal
.class Animal:
def __init__(self, name, color, age):
self.name = name
self.color = color
self.age = age
class Cat:
pass
つのクラス(子クラス)は、別のクラス(親クラス)から継承するために、関数の引数をコロンの前の括弧に渡すだけで、親クラスの名前を渡します.:
子クラスのclass Parent:
pass
class Child(Parent):
pass
It is a very good practice to have the classes in separate files. This means that we can have the classes in the same file. When should we separate our classes into separate files?
下のコードを見てみましょう.
# sharing of common functionality using classes
# Super (Parent) class
class Animal:
def __init__(self, name, color, age):
self.name = name
self.color = color
self.age = age
# Sub (Child) class of Animal
class Cat(Animal):
def purr(self):
print("Purr..!!")
# Another sub (Child) class of Animal
class Dog(Animal):
def bark(self):
print("Woof..!!")
# instances of the child classes
will = Cat("Willington", "red", 5)
will.purr()
granny = Dog("Granny B", "green", 3)
granny.bark()
Remember to pass in
self
and reference methods and attributes withself
複数の継承例
# there are three class Human, Robot and Hybrid
# Hybrid inherits from Human and Robot
class Human:
def __init__(self):
print("I am a Human")
def normal_wtt(self):
print("I can behave like a human being")
class Robot:
def __init__(self):
print("I am a Robot")
def super_wtt(self):
print("I can behave like a machine")
class Hybrid(Human, Robot):
def __init__(self):
print("I am a Hybrid")
h = Hybrid()
h.normal_wtt()
h.super_wtt()
# output
# I am a Hybrid
# I can behave like a human being
# I can behave like a machine
The Hybrid
クラスは、現在のアクセスHuman
and Robot
クラス.super()
機能使用する
super()
ベースクラスの元のメソッドにアクセスします.class Cat:
def __init__(self, color, legs):
self.color = color
self.legs = legs
def number_of_legs(self):
return self.legs
def color_of_obj(self):
return self.color
def run(self):
print(f"I have {self.number_of_legs()} legs")
print(f"I am {self.color_of_obj()} in complexion")
class Tiger (Cat):
def __init__(self, color, legs, is_big):
# to have the same functionality as the base class
# pass the color and legs data to the constructor of
# the super class. In this way we can modify the
# constructor method of the child class to match
# the parent class
super().__init__(color, legs)
# this saves us from doing
# self.color = color
# self.legs = legs
self.is_big = is_big
def run(self):
# call the original run methods of the base class
super().run()
print("I have enormous claws for sprinting")
felix = Cat("yellow", 6)
felix.run()
tiger = Tiger("green", 5, True)
tiger.run()
多型
多形の概念は、多くの形を持つことです.例を考えましょう.
# parent class
class Human:
def __init__(self, name):
self.name = name
def say_hello(self):
return f"Hello, {self.name}"
だからクラスはHuman
クラスには、こんにちはと言う方法がたくさんあります、そして、したがって、人は異なる人間のために異なる実装をしたいです.# child class - which extends Human
class Engineer(Human):
# say hello the engineers' way, so we override
# the say_hello method
def say_hello(self):
return f"Hello, {self.name}, I am an Engineer!!"
continuation in exercise 20 c
Reference
この問題について(プログラミング-運動20 b - OOP概念), 我々は、より多くの情報をここで見つけました https://dev.to/otumianempire/python3-programming-exercise-20-b-1od2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol