我々は、オブジェクト指向プログラミング(OOPオブジェクト指向プログラミングを)理解しました

我々は(:オブジェクト指向プログラミングOOP)は、オブジェクト指向プログラミングを理解しました

オブジェクト指向およびプロセス指向

プロセス指向プログラミングとは何ですか?

答えは:最初に行う、その後、何によると、最後の思考は何ですか。物事を自分、ライン、プログラマーある賃金労働者の視点

長所:複雑な問題の簡素化、合理化

短所:貧しいスケーラビリティ

オブジェクト指向プログラミングとは何ですか?

:オブジェクト指向プログラミングでは、プログラマは、問題を自分で解決するために、この世界では、プログラマはターゲットを作成した、世界を作るようなものです。物事は、上司のプログラマの視点に乾燥することがあります。

利点:スケーラビリティ

短所:ややプロセス指向の複雑さのために

オブジェクトとクラスの概念

オブジェクト:

  • 前記(変数)とスキル(機能)の組み合わせ。
  • オブジェクトは、物事の特定の存在であります

カテゴリー:

  • オブジェクトとスキルの同じ特性(可変の)数(関数)の組み合わせ
  • クラスは抽象的な概念であります

現実の世界では:それは、特定のオブジェクトであり、その後、これらのオブジェクトは、クラスに起因する同じ特性やスキルを持っています。例えば:一部の人々はこれが第一の目的で、その後、誰もが人類のこの抽象的な概念に降りてきます。

プログラム中:最初のクラスの定義であり、そのクラスは、オブジェクトとしてインスタンス。

カテゴリ

一つのクラスでは、変数や関数の最も一般的な定義。フォーカス:ボディクラスコードが定義フェーズで実行し、クラスの名前空間に投入されたクラスの名前空間、生成されるコードのクラス本体の名前を、生成されます。

クラスの実行前に呼び出さコードのみの体内機能、**しかしが、__init__関数内のように定義の時点で実行されます。**

#查看类名称空间里面的名称:__dict__
class Student:
        school = '社会大学'
    def __init__(self, name):
        self.name = name
        
    def study(self):
        print('我是学生,我会学习')
 
print(Student.__dict__) 
'''
结果:{'__module__': '__main__', 'school': '中北大学', '__init__': <function Student.__init__ at 0x108e685f0>, 'study': <function Student.study at 0x108e684d0>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}

school、study、__init__: 类定义时产生的名称
__module__:当前文件的模块,因为是执行文件,所以是__main__
__doc__:类的文档注释
'''

print(Student.school)  #结果:社会大学  #相当于:print(Student.__dict__['school'])
print(Student.study)  
#结果: <function Student.study at 0x1013244d0>  #相当于:print(Student.__dict__['study'])
Student.school = '北京大学'  # 相当于Student.__dict__['school'] = '北京大学'

(****)のクラスは、本質的に変数と関数の名前を保持名前空間であり、変数と関数の貯蔵容器であります

クラスのいずれかを使用します。名前空間から名前を見つけます

二つのカテゴリーの使用:緑のオブジェクト

クラスは、すべてのオブジェクトを変数を変更した場合。この変数は変更される場合には、クラスで定義された変数は、すべてのオブジェクトによって共有されています。オブジェクトは、オブジェクトの変数の型を変更することはできません。クラス変数を、本質的には、この変数のクラスを変更していない、自分のオブジェクトに名前空間属性を追加することです。

class Student:
    age = 18
    def __init__(self):
        pass
      
stu1 = Student()
stu2 = Student()
print(stu1.age) # 18
print(stu2.age) # 18
Student.age = 10
print(stu1.age) # 10
print(stu2.age) # 10

stu1.age = 20
print(stu1.age)  # 20
print(stu2.age)  # 10
print(stu1.__dict__)  # {'age': 20} 

オブジェクト

オブジェクトを生成することができますクラスを呼び出します。

呼び出し後の戻り値は、オブジェクトのクラス/インスタンスと呼ばれています。

手順は、クラスは、クラスをインスタンス化と呼ばれる呼び出します。

オブジェクトの性質も名前空間を形成します。クラスは何のinitパラメータがない場合は、名前空間のオブジェクトは空です。

例1:
class Student:
        def __init__(self):
        print(1)
        
stu = Student()
print(stu.__dict__)  #结果:{}

例2:
class Student:
    def __init__(self, name):
        self.name = name
        
 stu = Student('你爹')
print(stu.__dict__)  #结果:{'name':'你爹'}

フォーカス:クラスを呼び出すために何が起こりましたか?

図1に示すように、空のオブジェクトリターンを生成します

図2に示すように、関数のクラスINITトリガの実行と、initに渡される最初のパラメータのこの空のオブジェクト。最初のパスパラメータ初期化パラメータの後に再び括弧内のクラスのパラメータを呼び出します。

INIT補足:クラスが実行される際に1は、初期化関数が呼び出されます。2、init関数は値を返しません。

物件検索順序

バックと呼ばれるオブジェクト。属性。属性

オブジェクトは。場合は財産、今はそのようなプロパティが存在しない見つけるために、そうでない場合は、内部クラスから名前空間属性を見つけるために、内部空間オブジェクトの名前。

class Student:
    school = '中北大学'
    age = 18
    def __init__(self, name):
        self.name = name

    def study(self):
        print(1)

stu = Student('你爹')
print(stu.name)  
print(stu.age)
'''
说明:stu的命名空间只有name, stu.__dict__ = {'name':'你爹'}, 没有age,这时候就在类的名称空间中找。
类名称空间在类定义的时候有:school, age, __init__, study等,有age,则返回18
'''

バインディングのアプローチ

図1に示すように、クラス変数はクラスで定義されてもよい、オブジェクトを使用することもできます。呼び出したどんなに、同じアドレスへのすべてのポイント。クラス変数の値を変更すると、すべてのオブジェクトの呼び出しと一緒に両方の変更。

class Student:
    age = 18
    def __init__(self):
        pass
stu = Student()
print(id(stu.age))  # 4362244432
print(id(Student.age)) # 4362244432

Student.age = 20
stu1 = Student()
print(stu.age)  # 20
print(stu1.age) # 20

関数のクラスで定義された2は、クラスは、クラスを呼び出すとき、この関数は通常の関数であり、使用することができます。クラスで定義された関数は、オブジェクトのために使用されています。そして、オブジェクトにバインドするために使用されます。

何が標的に結合されましたか?

class Student:
    school = 'oldboy'

    def __init__(self, name, age, sex):
        self.name = name #stu1.name='小白'
        self.age = age   #stu1.age=18
        self.sex = sex   #stu1.sex='male'

    def choose_course(self,x): #self=stu1
        print('%s choosing course' %self.name)
        
stu1=Student('小白',18,'male')  # 小白 choosing course
stu2=Student('小花',38,'female') # 小花 choosing course
stu3=Student('小黑',28,'male') # 小黑 choosing course
'''
如上,用类实例化了三个对象,三个对象分别调用类里面的函数。调用时,会自动把对象传给类函数的第一个参数。
也就是说,类方法分别绑定给了不同的对象,哪个对象调用,用到的就是哪个对象的名称空间。不同对象互不干扰。
'''

おすすめ

転載: www.cnblogs.com/KbMan/p/11241406.html