I.はじめに
皆さんこんにちは、著者が別の記事をお届けしますこの記事では主に Python のクラス、オブジェクト、属性、メソッドの知識ポイントを説明します。
2. 知識の収集
2.1 クラスとオブジェクトの基本
2.1.1 クラスとオブジェクトの概要
クラス: クラスとは、共通の特徴や共通の行動を持つものの総称です。物が集まり、人々がグループに分けられます。これはここによく反映されています。鶏やアヒルは家禽として分類でき、子猫や犬も分類できます。 、ランボルギーニ、ブガッティ ヴェイロンなどは、スポーツカーのカテゴリなどに分類できますが、同じ特性や動作を持っている限り、1 つのカテゴリに分類できます。
多くの場合、クラスは非常に幅広いです。たとえば、スポーツ カー クラスには多くのスポーツ カーがあります。では、2 台のスポーツ カーと 1 台のスポーツ カーを 1 つのクラスにすることはできますか。実際、それも可能です。2 台のスポーツ カーには共通の特徴と特徴があります。スポーツカーが 1 台しかない場合、それをクラスと呼ぶこともできます。それは素晴らしいクラスである場合もありますし、噂の黄金のスポーツカーなどの伝説的なクラスである場合もあります。世界で最も高く、独自または特別な機能を持ち、個別にクラスになることもできます。この状況をシングルトンと呼びます。
オブジェクト: オブジェクトは、あるタイプのトランザクションのメンバー、つまり単一の個人であり、オブジェクトはインスタンスとも呼ばれます。よりわかりやすく言うと、オブジェクトはクラスのメンバーであり、スポーツカー クラスには多くのスポーツカーがあるため、そのうちの 1 台がメンバー、つまりオブジェクト、インスタンスになります。
2.1.2 単純なクラスとオブジェクト
単純なクラスとオブジェクトは次のようになります。
"""
格式为:
class Car():
类主体
"""
class Car():
pass
print(Car) # 类
print(Car()) # 对象
2.1.3 クラスの命名規則
クラスの命名は、変数、関数、モジュール、パッケージの命名とは異なります。一般的に、変数、関数などはアンダースコア命名とも呼ばれるスネーク形式で命名されますが、クラスは主にキャメルケースで命名されます。
"""
蛇形命名,单词使用下划线拼接,全部为小写
"""
add_number
str_add
number_add_no1_with
"""
驼峰命名,单词拼接,首字母大写
"""
class AutoCar:
pass
class NumberAdd:
pass
class CaseTest:
pass
2.1.4 クラスとオブジェクトの別の表現
上記の出力以外にも、クラスやオブジェクトを変数に代入し、その変数を出力することでクラスやオブジェクトを取得することもできます。1 つだけでなく、異なる複数の変数に代入することもできます。オブジェクトの違いは、メモリ アドレスの違いからわかります。
class Car:
pass
demo1_class = Car
demo2_class = Car()
demo3_class = Car()
print(demo1_class)
print(demo2_class)
print(demo3_class)
2.2 属性とメソッドの説明
2.2.1 クラスの属性
クラスとは、共通の特性と共通の動作を持つものの総称です。属性はクラスまたはオブジェクトの特定の特性を表し、クラスの特性はクラス属性と呼ばれます。たとえば、車のクラスの共通の特性にはハンドルがあり、どちらにも車輪などがあり、これらはクラス属性です。
クラス属性を取得したので、クラス名によってクラス属性を取得することもできます。
class Car:
"""类属性"""
steering_wheel = True # 方向盘
tyre_number = 4 # 车轮个数
engine = True # 发动机
material = ["铁", "橡胶", "玻璃", "塑料", "铝合金"] # 材料
"""获取类属性"""
print(Car.steering_wheel)
print(Car.tyre_number)
print(Car.engine)
print(Car.material)
クラス属性は関数と同じであり、独立しており、グローバル変数と相互に影響しません。
class Car:
tyre_number = 4 # 车轮个数
tyre_number = 5
print(Car.tyre_number)
print(tyre_number)
オブジェクトを通じてクラス属性を取得することもできます。さらに、クラス属性を変更することもできますが、クラス属性はオブジェクトではなくクラスを通じてのみ変更できます。
class Car:
tyre_number = 4 # 车轮个数
my_car = Car()
print(my_car.tyre_number)
"""修改类属性"""
Car.tyre_number = 3
print(f"修改后的轮子数量是:{Car.tyre_number}")
"""新增属性"""
Car.steering_wheel = True
print(Car.steering_wheel)
2.2.2 クラス属性の定義
クラス属性は、クラス内で定義するだけでなく、グローバルに定義することもできます。
class Car:
pass
# 全局中定义类属性
Car.wheel = True
print(Car.wheel)
2.2.3 インスタンスメソッドの呼び出し
メソッドは関数の構文を使用したクラスの動作です。メソッドは関数であり、メソッドには固定パラメーター self があり、メソッドはカスタマイズできます。self はインスタンス、オブジェクトを表します。次のコードに示すように、メソッドを呼び出したい場合、このフォームはインスタンス メソッドとも呼ばれます。
"""
实例方法:通过对象.方法()进行调用
"""
class Car:
"""方法"""
def drive(self):
print("滴滴,开始开车")
# 调用方法
my_car = Car()
my_car.drive()
2.2.4 クラスメソッドの呼び出し
クラス メソッドは class.method() を通じて呼び出されます。クラス メソッドは @classmethod としてデコレータとして表され、self はクラス メソッドとして表される cls に置き換えられます。
"""
类方法:通过类.方法()进行调用
"""
class Car:
pass
@classmethod
def color(cls):
my_color = "我是红色,一个类方法"
return my_color
print(Car.color())
2.2.5 静的メソッド呼び出し
静的メソッドはクラス メソッドと似ています。静的メソッドにもデコレータが必要です。静的メソッドには固定パラメータがありません。静的メソッドのデコレータは @staticmethod として表されます。静的メソッドのクラスとインスタンスの両方を呼び出すことができます。静的メソッド、クラス、オブジェクトには直接性がありません。関係はクラス管理の外部で定義できます。
class Car:
pass
"""静态方法"""
@staticmethod
def color():
color = "绿色,我是静态方法"
return color
print(Car.color())
2.2.6 メソッドの継承
息子が父親のプロパティを継承するのと同じように、メソッドは継承できます。息子は父親のプロパティを自由に使用できます。クラス A がクラス B を継承する場合、同じクラス A はクラス B のすべてのメソッドとオブジェクトを使用できます。
class Car:
def driver(self):
print("开车")
def stop(self):
print("停车")
"""
继承
Car:父类
SuperCar:子类
子类可以使用父类所有的属性和方法
"""
class SuperCar(Car):
"""所有Car的属性和行为,SuperCar全部继承"""
pass
Ferrari = SuperCar()
Ferrari.driver()
2.2.7 メソッドの書き換え
サブクラスと親クラスが同じ名前のメソッドを使用する場合、最初にサブクラスと親クラスのメソッドが使用されます。これをメソッドの書き換えと呼びます。
class Car:
def driver(self):
print("开车")
def stop(self):
print("停车")
"""
继承
Car:父类
SuperCar:子类
子类可以使用父类所有的属性和方法
"""
class SuperCar(Car):
"""所有Car的属性和行为,SuperCar全部继承"""
def driver(self):
print("跑车开起来飞快")
Ferrari = SuperCar()
Ferrari.driver()
2.2.8 スーパーリライト
サブクラスと親クラスが同じ名前のメソッドを使用する場合、最初に自分のメソッドを使用しますが、自分のクラスと親クラスを同時に使用することもできます。この場合、これをスーパー リライトと呼びます。
class Car:
def driver(self):
print("开车")
def stop(self):
print("停车")
"""
继承
Car:父类
SuperCar:子类
子类可以使用父类所有的属性和方法
"""
class SuperCar(Car):
"""所有Car的属性和行为,SuperCar全部继承"""
def driver(self):
"""超级重写,super()代表父类"""
super().driver()
print("跑车开起来飞快")
Ferrari = SuperCar()
Ferrari.driver()
2.3 オブジェクトの初期化とインスタンス属性の説明
2.3.1 オブジェクトの初期化
オブジェクトを最初から作成することは生産プロセスです。オブジェクトを作成した後、この状況をオブジェクトの初期化と呼びます。初期化されたオブジェクトは、クラスの下でマジック関数 init を自動的に呼び出します。この関数は、オブジェクトを出力するときに実行されます。コード セグメントマジック関数では、関数内の self はオブジェクトが生成される前のマークを表し、生成後は次のコードに示すように object1 に割り当てられます。
class Car:
tyre_number = 4 # 车轮个数
def __init__(self):
print("I love you")
object1 = Car() # 我们把Car()的产生称之为对象初始化
print(object1)
init 関数は通常の関数とは異なります。init 関数は戻り値を持つことができません。デフォルトは None であり、それ以外の値を指定することはできません。それ以外の場合は、エラーが報告されます。
class Car:
wheel = True
def __init__(self):
self.wheel = True
return "a"
print(Car().wheel)
2.3.2 クラス属性とインスタンス属性
まず概念を明確にする必要があります。インスタンス属性はオブジェクトの属性であり、オブジェクトはインスタンスです。インスタンス属性はオブジェクトのメンバー、個別の属性、固有の属性を表します。一方、クラス属性は誰もが持つ共通の属性や特性です。
インスタンスの属性は次のようになります。
class Car:
tyre_number = 4 # 类属性
def __init__(self):
"""实例属性,self.对象属性"""
self.color = "红色" # 实例属性
self.price = "190w"
クラス属性とインスタンス属性の名前が同じ場合、インスタンス属性は最初に独自の名前を使用し、利便性を向上させるために位置パラメーターを使用することもできます。
class Car:
tyre_number = 4 # 车轮个数
def __init__(self, car_color, car_price):
"""实例属性,self.对象属性"""
self.color = car_color
self.price = car_price
my_car = Car("黄金色", "3500w")
print(f"这台车的颜色是{my_car.color}")
print(f"这台车的价格是{my_car.price}")
2.4 オブジェクトの割り当て
オブジェクトはクラスとは異なります。オブジェクトの割り当ては等しくありませんが、クラスの割り当ては等しいです。次のコードに示すように、クラスは 3 つの変数に割り当てられており、これらはまったく同じメモリ アドレスです。これは、これら 3 つが同じであることを証明しています。変数はすべて同じ 1 クラスを表しますが、オブジェクトの割り当ては異なるメモリ アドレスにあるため、オブジェクトによって割り当てられた 3 つの変数が異なるオブジェクトであることがわかります。
class Car:
pass
my_car1 = Car
my_car2 = Car
my_car3 = Car
my_obj1_car = Car()
my_obj2_car = Car()
my_obj3_car = Car()
print(id(my_car1))
print(id(my_car2))
print(id(my_car3))
print(my_obj1_car)
print(my_obj2_car)
print(my_obj3_car)
2.4.1 クラス属性とインスタンス属性へのアクセス
クラス属性にアクセスしたい場合は、クラスまたはオブジェクトを通じて取得できます。
class Car:
wheel = True
print(Car.wheel)
print(Car().wheel)
2.5 クラスとオブジェクトの役割
クラス、オブジェクト、関数は似ています。これらは呼び出されたり呼び出されたりします。なぜクラスとオブジェクトを学ぶ必要があるのですか。何のメリットがありますか。実際、本質的には大きな違いはありません。明らかなことは、クラスの方が便利であるということです。を管理し、より簡潔に呼び出すために、定義の複雑さは受け入れることができますが、定義が 1 つしかなく、無数の呼び出しがあるため、呼び出しの複雑さは受け入れられません。関数に 100 個の仮パラメータがある場合、この場合、関数を呼び出すときに 100 個の実際のパラメータを渡す必要がありますが、クラスでは 100 個のインスタンス属性を一度に定義できるため、呼び出しプロセスが簡素化され、呼び出し時に渡すパラメータを少なくしたり、パラメータをまったく渡さなかったりすることもできます。デフォルトパラメータやキーワードパラメータとして記述すると可読性が低く、クラスほど明確で直接的ではありません。これがクラスとオブジェクトを使用する最も直接的な理由です。
クラスとオブジェクトは、関数の呼び出しプロセスよりも簡潔であるだけです。これは、実際のプロジェクトでクラスとオブジェクトを使用しなければならないという意味ではありません。また、関数を使用して、スクリプトのような小さなものから大きなものまで、同じ機能を実現することもできます。テストフレームワークになると、クラスとオブジェクトで削減されるコード量に大きな違いはありません、効率という点では、クラスとオブジェクトのメソッドは関数と変わりませんが、まだ学ぶ必要があります。電話して理解する方が便利です。コストも比較的削減されます。
最後に、私の記事を注意深く読んでくださった皆さんに感謝します。互恵性は常に必要です。それはそれほど価値のあるものではありませんが、必要な場合はそれを取り上げることができます。
ソフトウェアテストインタビューアプレット
ソフトウェア テストの質問バンクには、何百万人もの人が参加しました。!!誰が知っているのか!!!ネットワーク全体で最も包括的なクイズ ミニ プログラムです。携帯電話を使用して、地下鉄やバスの中でもクイズに答えることができます。
次の面接の質問セクションが取り上げられます。
1. ソフトウェアテストの基礎理論、2. Web、アプリ、インターフェース機能テスト、3. ネットワーク、4. データベース、5. Linux
6. Web、アプリ、インターフェイスの自動化、7. パフォーマンス テスト、8. プログラミングの基本、9. 時間面接の質問、10. 公開テストの質問、11. セキュリティ テスト、12. コンピューターの基本
これらの資料は、[ソフトウェア テスト] の友人にとって最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。あなたにも役立つことを願っています。