- オブジェクト指向プログラミング(OOP)
- 財団
- 官民
- 継承
- 組み合わせ、ミックスイン
- マジック機能
- マジックの機能の概要
- マジッククラスのコンストラクタ関数
- 魔法のような演算機能
オブジェクト指向の概要(OO、オブジェクト指向)
- クラスとオブジェクトと概念
- カテゴリー:抽象名詞、共通点のコレクションを表します
- オブジェクト:比喩的なもの、一人の個人
- オブジェクトクラスとの関係
- 物事のクラス特定の個々の代わりに比喩、
- 一つは、物事の大きなクラスを抽象表現しています
- コンテンツクラス、コンテンツは2を持っている必要があります
- 物事の特性を示し、属性(変数)と呼ばれます
- 物事の機能やアクションは、メンバー・メソッド(関数)と呼ばれることを示しています
2.基本的な実装クラス
- クラスの命名
- 変数の命名規範に従ってください
- 大きいハンプ(各単語が大文字、1つまたは複数の単語からなる単語を直接単語が接続されています)
- 類似した名前でネーミングシステムを避けるようにしてください
- クラスを宣言する方法
- あなたは、キーワードクラスを使用する必要があります。
- この方法は、クラスとプロパティで構成され、他の可
- そして、どれも値がない場合は属性定義のメンバーは、変数の代入として使用することができます
クラスをインスタンス化
变量 = 类名() #实例化了一个对象
- アクセスオブジェクトのメンバ
ドット演算子を使用して
obj.成员属性名称 obj.成员方法
- デフォルトでは、すべてのメンバーは、クラスとオブジェクトを確認するために、特別な機能(マジック機能)することができ
検査対象のすべてのメンバー
# dict前后各有两个下划线 obj.__dict__
クラスのすべてのメンバー
# dict前后各有两个下划线 class_name.__dict__
ケース
# 创建类 class Person(): # 类变量 name = 'chenpingan' age = 18 # 方法 def say(self): print('hello world') # 实例化 p = Person() p.say() # 查看对象成员 print(p.__dict__) print(Person.__dict__) >>> hello world {} {'__module__': '__main__', 'name': 'chenpingan', 'age': 18, '__init__': <function Person.__init__ at 0x7f87ec138510>, 'say': <function Person.say at 0x7f87ec138400>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
クラスとオブジェクトの分析3.メンバー
- クラスとオブジェクトのメンバーを格納することができ、メンバーはすべてを分類することができます、あなたはすべてのオブジェクトを行くことができます
- ストレージ・クラスのメンバーのために使用されるオブジェクトのクラスに関連付けられています。クラスオブジェクト
- 独占貯蔵部材現在のオブジェクトに格納することです
- メンバーがいないオブジェクトを行う場合、オブジェクトへのアクセスは、メンバーは、クラスのメンバーと同じ名前にアクセスしようとすると、オブジェクトがこのメンバーを持っている場合は、オブジェクトのメンバを使用するようにしてください
- オブジェクトを作成する場合は、クラスのメンバーは、何のメンバーがどのオブジェクトを入れていませんが、空のオブジェクトを取得することはありません
- 再割り当てまたはクラスメンバーのオブジェクトを介してオブジェクトを介してメンバーを追加、メンバーが対応するオブジェクトに保存され、クラスのメンバーを変更しません。
自己に関しては4
- 自己はあなたがオブジェクトを介してメソッドを呼び出した場合、そのオブジェクトは自動的にオブジェクトのメソッドで現在のメソッドに渡され、現在のオブジェクト自体のパラメータを表し
- 自己キーワードではありません、普通のパラメータは、オブジェクトを受け入れ、理論的には、任意の通常の変数名に置き換えることができます
- この方法は、結合していないクラスメソッドパラメータ自己の方法となっているオブジェクトを介してアクセスすることができ、この方法ではない自己結合クラスで、クラスによってのみアクセスすることができます
- クラスメソッドは、により、現在のクラスのメンバーへのアクセスを必要とする場合、アクセスクラスバインディングクラスにメソッドを使用する場合は、クラスのアクセス。メンバー名を
ケース
# 创建类 class A(): name = "dana" age = 18 # 注意say的写法,参数由一个self def say(self): self.name = "aaaa" self.age = 200 # 此案例说明 # 类实例的属性和其对象的实例的属性在不对对象的实例属性赋值的前提下, # 指向同一个变量 # 此时,A称为类实例 print(A.name) print(A.age) print("*" * 20) # id可以鉴别一个变量是否和另一个变量是同一变量 print(id(A.name)) print(id(A.age)) print("*" * 20) a = A() # 查看A内所有的属性 print(A.__dict__) print(a.__dict__) a.name = "yaona" a.age = 16 print(a.__dict__) print(a.name) print(a.age) print(id(a.name)) print(id(a.age)) >>> dana 18 ******************** 140666260313176 93936169025280 ******************** {'__module__': '__main__', 'name': 'dana', 'age': 18, 'say': <function A.say at 0x7fef6a799730>, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None} {} {'name': 'yaona', 'age': 16} yaona 16 140666251554240 93936169025216
ケース
# __class__.属性 class Teacher(): name = "dana" age = 19 def say(self): self.name = "yaona" self.age = 17 print("My name is {0}".format(self.name)) # 调用类的成员变量需要用 __class__ print("My age is {0}".format(__class__.age)) def sayAgain(): print(__class__.name) print(__class__.age ) print("Hello, nice to see you again") t = Teacher() t.say() # 调用绑定类函数使用类名 Teacher.sayAgain() >>> My name is yaona My age is 19 dana 19 Hello, nice to see you again
ケース
# 关于self的案例 class A(): name = " liuying" age = 18 def __init__(self): self.name = "aaaa" self.age = 200 def say(self): print(self.name) print(self.age) class B(): name = "bbbb" age = 90 a = A() # 此时,系统会默认把a作为第一个参数传入函数 a.say() # 此时,self被a替换 A.say(a) # 同样可以把A作为参数传入 A.say(A) # 此时,传入的是类实例B,因为B具有name和age属性,所以不会报错 A.say(B) # 以上代码,利用了鸭子模型 >>> aaaa 200 aaaa 200 liuying 18 bbbb 90