-Python基礎を終えday23学習オブジェクト

2019年8月26日の学習仕上げ

オブジェクト指向のpython

クラスとオブジェクト

そのクラス分類、タイプ、オブジェクト指向設計は、スキルの組み合わせの中で最も重要な概念、目的および特徴である、とカテゴリは同様のオブジェクト機能とスキルの組み合わせのシリーズです

そこで問題は、最初に(例えば、特定の人物の存在など)特定のオブジェクトが存在している、または一部の人間の概念に、この問題は2例を見てする必要があります

現実の世界では:まず、そのオブジェクト、およびクラスを持っています

世界は、オブジェクトが実際に人類の文明の発展に伴い、その後、存在するさまざまなことは確かである、例えば、ヒト、動物、植物などの概念など、さまざまな視点が異なるカテゴリをまとめた人間、

また彼は、クラスがちょうど概念でありながら、オブジェクトは実際の、具体的な存在ではないことを言いました

必ずオブジェクトを生成した後、クラスを定義します。プログラムで

この関数は、最初に定義された機能の使用に似て、関数を呼び出した後、クラスが同じで、プログラムは、後にクラスを呼び出し、クラスを定義する必要があります。

ない同じであり、機能を実行するコードの本体を呼び出す関数がクラスオブジェクトを生成する呼び出す関数本体を実行した結果を返し、オブジェクトが返されます

# 类的定义
class dog():
    def __init__(self):
        self.name = name
    def func(self,name):
        print(self.name)
dog1 = dog('happy')
dog1.func()


# happy

クラス定義された関数は、クラスを使用することができ、機能属性クラスですが、使用は、それの正常な機能で、関数のパラメータのルールを完全に遵守する必要性を示唆し、いくつかを渡すためにいくつかの値を渡しました

まず、導入

  • クラス属性が変更された場合は、学生の上記クラスの場合、他のオブジェクトのプロパティが変更されます
OldboyStudent.school = 'OLDBOY'
print(stu1.school)
OLDBOY
print(stu2.school)
OLDBOY

カスタムオブジェクトの第二に、ユニークな機能

print(stu1.__dict__)
{}
print(stu2.__dict__)
{}
  • クラスに似た自然のオブジェクトだけでなく、名前空間が、オブジェクト・スペースの名前は、オブジェクト固有の名前を保存すると、クラスオブジェクトは、共通名に格納されています。したがって、我々は直接だけでカスタム名をターゲットにすることができます。
stu1.name = 'tank'
stu1.age = 18
stu1.gender = 'male'

print(stu1.name, stu1.age, stu1.gender)
tank 18 male
try:
    print(stu2.name, stu2.age, stu2.gender)
except Exception as e:
    print(e)
'OldboyStudent' object has no attribute 'name'
stu2.name = 'sean'
stu2.age = 19
stu2.gender = 'female'

print(stu2.name, stu2.age, stu2.gender)
sean 19 female

第三に、プロパティは見つける
4つのカスタム属性クラスの定義フェーズを

def init(obj, x, y, z):
    obj.name = x
    obj.age = y
    obj.gender = z


init(stu1, 'tank1', 181, 'male1')
print(stu1.name, stu1.age, stu1.gender)
tank1 181 male1
init(stu2, 'sean1', 191, 'female1')
print(stu2.name, stu2.age, stu2.gender)
sean1 191 female1
  • オブジェクトがインスタンス化されるときのタイミング特性を自動的にトリガすることができた場合、単純であるが、それでもあまりにも面倒みましょうカスタムプロパティが、上記の方法を使用して、それはあなたがクラスの__init__メソッドを使用することができ、より便利です。

[

class OldboyStudent:
    school = 'oldboy'

    def __init__(self, name, age, gender):
        """调用类的时候自动触发"""
        self.name = name
        self.age = age
        self.gender = gender
        print('*' * 50)

    def choose_course(self):
        print('is choosing course')


try:
    stu1 = OldboyStudent()
except Exception as e:
    print(e)
__init__() missing 3 required positional arguments: 'name', 'age', and 'gender'
stu1 = OldboyStudent('nick', 18, 'male')
**************************************************
  • 上記の現象によって見つけることができたときに、呼び出し元のクラス二つのことを発生します。
    1. 空のオブジェクトを作成します。
    2. 自動トリガークラスの__init__機能はSTU1となり着信クラスと括弧内のパラメータ
print(stu1.__dict__)
{'name': 'nick', 'age': 18, 'gender': 'male'}

プロパティのクラスを探します

まず、プロパティを検索

  • クラスにもエラーならば、見つけるために、クラスに行っていない、独自の名前空間を見つけるために、オブジェクトを起動します

バウンドメソッドオブジェクトクラス

class OldboyStudent:
    school = 'oldboy'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.sex = gender

    def choose_course(self):
        print(f'{self.name} choosing course')

    def func(self):
        print('from func')
  • クラスデータ属性および機能属性が持つすべての共有オブジェクトの名前空間で定義されています
  • データのみのオブジェクトの名前空間で定義された属性、およびオブジェクトデータの属性に固有のものです

第二に、クラス・バインドされたオブジェクトは、オブジェクト

nick
oldboy
  • クラス定義された関数は、クラスを使用することができ、機能属性クラスですが、使用は、それの正常な機能で、関数のパラメータのルールを完全に遵守する必要性を示唆し、いくつかを渡すためにいくつかの値を渡しました
print(OldboyStudent.choose_course)
<function OldboyStudent.choose_course at 0x10558e840>
try:
    OldboyStudent.choose_course(123)
except Exception as e:
    print(e)
'int' object has no attribute 'name'

第三に、オブジェクトは、バインディングメソッドのオブジェクトを使用しています

print(id(stu1.choose_course))
print(id(stu2.choose_course))
print(id(stu3.choose_course))
print(id(OldboyStudent.choose_course))
4379911304
4379911304
4379911304
4384680000
print(id(stu1.school))
print(id(stu2.school))
print(id(stu3.school))
4380883688
4380883688
4380883688
print(id(stu1.name), id(stu2.name), id(stu3.name))
4384509600 4384506072 4384507864
stu1.choose_course()
nick choosing course
stu2.choose_course()
sean choosing course
stu3.choose_course()
tank choosing course
  • クラス定義された関数は、クラスが実際に使用することができますが、実際には多くの場合、クラス定義の機能は、標的に結合するために使用されているので、このクラスで定義された関数は、パラメータ自己を所有する必要がありますが追加されました
stu1.func()
from func
stu2.func()
from func

おすすめ

転載: www.cnblogs.com/Wunsch/p/11412740.html