ホームページ  >  記事  >  バックエンド開発  >  Python 言語によるオブジェクト指向プログラミングの入門 (コード付き)

Python 言語によるオブジェクト指向プログラミングの入門 (コード付き)

不言
不言転載
2019-03-09 13:56:352871ブラウズ

この記事では、Python 言語でのオブジェクト指向プログラミング (コード付き) を紹介します。これには一定の参考価値があります。参考にしていただければ幸いです。

#オブジェクト指向 Python 言語

オブジェクト指向プログラミング (OOP) は、オブジェクト指向言語についてよく言及されます。カプセル化、継承、クラスなどの概念。

オブジェクト指向の起源: すべてはオブジェクトであるという哲学に基づいて、中心的なアイデアはプログラムをオブジェクト化してモジュール化することです。Python 言語では、class はクラスの名前によく使用されます (例: class Person() )、クラス Student など。多くの場合、クラスには属性と動作が存在します。たとえば、Person クラスには、名前、身長、体重などの属性があります。これらの Python の動作には、食べる、寝る、友達を作るなどが含まれます。クラスを使用すると、繰り返しコードを再度記述することなく、後の呼び出しを簡単に実装できるため、プログラミングの効率が大幅に向上します。そのため、現在ではオブジェクト指向プログラミング言語が広く使われています。
オブジェクト指向には、継承、カプセル化、ポリモーフィズムという 3 つの大きな特徴があります。

1 継承

継承の概念: クラスが別のクラスを継承する場合、継承されたクラスはサブクラスと呼ばれ、継承されたクラスはサブクラスと呼ばれます。親のような人です。
目的: コードの再利用を可能にする。
理解: サブクラスと親クラスの関係は、日常生活における親子関係ではありません。サブクラスと親クラスの関係は、特殊化と一般化です。それは is-a 関係であり、サブクラスは親クラスで、より詳細な分類になります。例えば、dogクラスがanimalから継承した場合、犬は動物であると理解できますので、継承設計の際は注意してください
結果: 継承後、サブクラスは親クラスの属性とメソッドを自動的に持ち、サブクラスも継承されます。独自の固有の属性とメソッドを作成できます。メソッドの目的は関数を拡張することです。サブクラスは親クラスのメソッドをオーバーライドすることもできます。これはメソッドの書き換えです。

2 カプセル化

概念: 情報隠蔽とも呼ばれるカプセル化は、抽象データ型を使用してデータとデータベースの操作をカプセル化し、分割不可能な独立したエンティティを形成することを指します。 protected 抽象データ型内では、内部の詳細は可能な限り隠蔽され、外部と接続するために一部の外部インターフェイスのみが保持されます。システムの残りの部分は、データにラップされた承認された操作を通じてのみ、この抽象データ型と通信および対話できます。つまり、ユーザーはオブジェクトの内部メソッドの実装詳細を知る必要はなく、オブジェクトが提供する外部インターフェース(オブジェクト名とパラメータ)に従ってオブジェクトにアクセスできます。
利点: (1) 明確な分業。特定の機能を実装できるコードを独立したエンティティにカプセル化した後、各プログラマが必要なときにそれを呼び出すことができるため、専門分業が実現します。 (2) 情報の隠蔽と実施の詳細。アクセス権を制御することで、クライアント プログラマに見られたくない情報を非表示にすることができます。たとえば、顧客の銀行パスワードを秘密にしておく必要がある場合、その顧客に対する権限のみを開発できます。
3 ポリモーフィズム
概念: 同じことですが、同じメソッドが呼び出され、パラメーターが同じ場合、動作は異なります。
理解: サブクラスは親クラスとして表示されますが、処理を行う際には独自のメソッドを実装します。サブクラスが親クラスとして表示される場合、上向き変換 (アップキャスト) が必要です。アップキャストは JVM によって自動的に実装されるため安全ですが、下向き変換 (ダウンキャスト) は安全ではなく、強制的な変換が必要です。サブクラスが親クラスとして表示される場合、そのサブクラス固有のプロパティとメソッドは使用できません。
「プロセス指向」と「オブジェクト指向」の違い
プロセス指向は、問題を解決するために必要な手順を分析し、関数を使用してその手順を段階的に実装することです。それらを 1 つずつ呼び出すだけです; オブジェクト指向は、問題を構成するトランザクションを個々のオブジェクトに分解することです。オブジェクトを確立する目的は、ステップを完了することではなく、問題を解決するステップ全体における何かの動作を記述することです。問題。
プロセス指向とオブジェクト指向を理解するには、実例を使用できます。たとえば、ゲームを完成させた後、プロセス指向の設計アイデアでは、まず問題のステップを分析します:
1. ゲームスタート、2. 競技開始、3. ミッドウェイトランセンド、4. 勝者決定。上記の各手順を異なる方法で実装します。
問題を解決するためのオブジェクト指向設計アイデアの場合。オブジェクト指向設計は、別の観点から問題を解決します。競技全体は、1. 競技の対象 2. 競技ルール 3. 結果の評価などに分けられます。
次は、Python 言語のオブジェクト指向プログラミング プロセスを説明するための小さな例です:

一、
#1 定义一个类,其中类名是学生
#2 学生具有的属性
#3 学生具有哪些行为
#4 具体化两个学生,实例化类型
class Student(object):
    name = " "
    age = 12
    weight = 50
    school = "wuhan university"
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
stu1 = Student()
stu2 = Student()
print(stu1)
print(stu2)
print(stu1.name)
print(stu1.age)
print(stu2.name)
print(stu2.age)

二、
#进一步优化:通过上面的程序我们发现他们最终输出的对象的属性一样,但是事实上他们是两个不同的学生,他们的名字,年龄并不相同,那么接下来需要做的就是给他们各自赋予各自的属性,利用类名.属性=某个值,和方法的调用一样也是类名.方法名
class Student(object):
    name = " "
    age = 12
    weight = 50
    school = "wuhan university"
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
stu1 = Student()
stu1.name="王"
stu1.age = 20

stu2 = Student()
stu2.name = "张"
stu2.age = 50
print(stu1)
print(stu1.name)
print(stu1.age)
print(stu2)
print(stu2.name)
三、
#进一步优化:通过第二个程序我们发现在定义对象的属性时我们还需要将所得属性命名在写一次,这样显然比价麻烦,于是有了更好的属性命名方法,我们可以使用初始化 
def __init__(self,、、、),最后在命名属性的时候只需要在类名后面的括号中填写具体的属性值即可,大大较少了代码量。

class Student(object):
    def __init__(self,name,age,school):
        self.name = name
        self.age = age
        self.school = school
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
stu1 = Student("li",25,"scu")
stu2 = Student("sun",20,"wpu")
print(stu1)
print(stu2)
print(stu1.name)
print(stu1.school)
print(stu2.name)
print(stu2.school)

self は、クラスではなく、クラス内のインスタンスを表します。そのインスタンスは、クラス内のメソッドを呼び出します。この自己はそのオブジェクトに属します。たとえば、自己を紹介するメソッドを Student に追加します。

class Student(object):
    def __init__(self,name,age,school):
        self.name = name
        self.age = age
        self.school = school
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
    def intro(self):
        print("my name is{},{} years old".format(self.name,self.age))
stu1 = Student("li",25,"scu")
stu2 = Student("sun",20,"wpu")
print(stu1)
print(stu2)
print(stu1.name)
print(stu1.school)
print(stu2.name)
print(stu2.school)
intro1 = stu1.intro()
intro2 = stu2.intro()

クライアントに見せるためにオブジェクトの属性などの情報を出力したいが、属性が多すぎて一つずつ出力するのが面倒な場合は、__str__ を使用できます。 ()、 次のように: ###

class Student(object):
    def __init__(self,name,age,school):
        self.name = name
        self.age = age
        self.school = school
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
    def intro(self):
        print("my name is{},{} years old".format(self.name,self.age))
    def __str__(self):
        return "%s-%d"%(self.name,self.age)
stu1 = Student("li",25,"scu")
stu2 = Student("sun",20,"wpu")


print(stu1)

如果要是的Python中类的属性值不改变,那么在属性前加两个-,称为私有属性,private
如:
self.__money = money,不能再外面直接访问
print(stu1.__money)报错
但是在内部可以直接使用,如在方法eat中调用
如果属性名前是一个下划线,则他虽然可以在外部访问,但是约定俗成提示不要访问!!!

以上がPython 言語によるオブジェクト指向プログラミングの入門 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。