オブジェクト指向による自動運用保守の詳しい解説 Pythonシリーズ
オブジェクト指向プログラミング
プロセス指向: ビジネスロジックに基づいた上から下への基本コード
関数型: 特定の関数コードを関数にカプセル化し、後で再度記述することなく直接呼び出します
オブジェクト-指向性: 分類とカプセル化で関数を実行することで、開発が「より速く、より良く、より強力に」なります
# Java や C# などのプログラミング言語はオブジェクト指向プログラミングのみをサポートしますが、Python は関数型プログラミングと関数型プログラミングの混合をサポートします。オブジェクト指向プログラミング
オブジェクト指向の例
# 函数式编程 def bar(): print('bar') bar() # 直接调用函数 # 面向对象编程 class Foo: # 创建类 def bar(self): # 在类里面定义函数 这里self是一个特殊的参数 创建对象时Foo将自身传进来 print('bar') obj = Foo() # 创建一个对象 obj.bar() # 由对象去访问类里面函数
オブジェクト指向の 3 つの主要な機能: カプセル化、継承、ポリモーフィズム
カプセル化
必要なコンテンツを作成したクラスにカプセル化し、必要に応じて呼び出します
class Foo: # 创建类 def __init__(self, name, age): # Foo接收到两个参数后会封装在自己类内部 self.name = name self.age = age obj = Foo('kobe', 18) # 创建一个对象 传两个参数 print(obj.name, obj.age) # 外面调用封装好的参数 输出: kobe 18
クラスメンバー
フィールド: 通常のフィールド、静的フィールド
メソッド: 通常のメソッド、静的メソッド、クラスメソッド
属性: 通常の属性
1) フィールド (クラス内にカプセル化されたパラメーター)
class Foo: # 字段(静态字段 保存在类里面) CC = "中国" def __init__(self, name): # 字段(普通的字段 保存在对象里面) self.name = name # 普通字段通过对象访问 obj = Foo('上海') print(obj.name) # 静态字段通过类访问 print(Foo.CC)
2) メソッド (関数)クラスにカプセル化されています)
class Foo: def show(self): # 普通方法:对象调用执行 方法属于类 print(self.name) @staticmethod def f1(): # 静态方法 由类调用执行 print('f1') @classmethod def f2(cls): # class 自动给类名传进去了 # 类方法 # cls 是类名 加()创建对象 print(cls) # 创建对象 obj = Foo() # 通过对象去访问普通方法 obj.show() # 通过类去访问静态方法 Foo.f1() # 类方法 会将类 Foo 名字直接传入函数 Foo.f2()
3) 属性
クラスの属性を定義する前に、クラス内のメソッドにアクセスするときにメソッド名の後に括弧 () を追加する必要があります: 例: obj.f1()
属性を定義した後、クラス内のメソッドに直接アクセスできます obj.f1
class Foo: @property def f1(self): print('f1') obj = Foo() obj.f1 # 无需加括号直接通过对象访问
設定可能および削除可能
class Foo: @property # 在类方法上加上 property装饰器 def f1(self): print('f1') @f1.setter # 设置数值 def f1(self, values): print(values) @f1.deleter # 可删除 def f1(self): print('del...') obj = Foo() obj.f1 # 无需加括号直接通过对象访问 obj.f2 = 100 del obj.f1 输出: f1 del...
クラス属性を記述する別の方法
class Foo: def f1(self): return 100 def f2(self, value): print(value) def f3(self): print('300') # 类属性定义 Foo = property(fget=f1, fset=f2, fdel=f3) obj = Foo() # 取值 ret = obj.Foo print(ret) # 赋值 obj.Foo = 200 # 删除 del obj.Foo # 输出 100 200 300
クラスメンバー修飾子
クラスメンバー修飾子: でフィールドまたはメソッドを定義しますクラスをパブリックまたはプライベートとして指定します
パブリックメンバー: どこからでもアクセスできます
プライベートメンバー: クラス内でのみアクセスできます
class Foo: __cc = 123 def __init__(self, name): self.__name = name # 加两个下划线__表示私有字段 外部、继承都不能调用 def f1(self): print(self.__name) @staticmethod # 加 staticmethod 装饰器表示为静态方法,可以不加self参数直接外部调用 def f3(self): print(Foo.__cc) obj = Foo('kobe') # print(obj.__name) # 通过对象外部访问内部普通字段不成功 obj.f1() # print(Foo.__cc) # 通过外部访问内部静态字段也不成功 obj.f3() # 特殊访问方法 print(obj._Foo__name)
クラスの特別なメンバー
__doc__ #クラスの説明情報
__module__ #現在のオブジェクトがどのモジュールに属しているか
__class__ #現在のオブジェクトはどのクラスに属しているか
__str__ #オブジェクトを出力するときに返される値
__init__ #構築メソッド
__del__ #破壊メソッド
__call__ #トリガーの実行オブジェクトの後に括弧を追加する
__dict__ #クラスまたはオブジェクト内
__getitem__ のすべてのメンバー #辞書などのインデックス操作
__setitem__ #インデックス操作
__delitem__
6)__dict__
class Foo: """ 注释 __doc__ """ obj = Foo() print(obj.__doc__) 输出: 注释 __doc__ 2)__module__ 和 __class__ from lib.aa import C obj = C() print obj.__module__ # 输出 lib.aa,即:输出模块 print obj.__class__ # 输出 lib.aa.C,即:输出类
class Foo: def __init__(self, name, age): # 构造方法 self.name = name self.age = age def __str__(self): # str方法 return '%s - %s ' % (self.name, self.age) obj1 = Foo(name='kobe', age=18) obj2 = Foo(name='jordan', age=18) print(obj1) print(obj2) # 输出: kobe - 18 jordan - 18
class Foo: def __init__(self, name, age): # 构造方法 self.name = name self.age = age # 析构方法:在垃圾回收之前执行 def __del__(self): pass
class Foo: def __call__(self, *args, **kwargs): print('call') p = Foo() # 对象后面加括号执行 __call__ 方法 p() # 一个括号是类创建了一个对象 两个括号是去执行 __call__ 方法 Foo()() # 输出: call call
class Foo: def __init__(self, name, age): # 构造方法 self.name = name self.age = age obj1 = Foo(name='kobe', age=18) # 获取对象中封装的数据返回一个字典 ret = obj1.__dict__ print(ret) # 输出: {'name': 'kobe', 'age': 18} # 全部的类方法 # print(Foo.__dict__)
class Foo: def __getitem__(self, item): print('getitem') def __setitem__(self, key, value): print('setitem') print(item.start, item.stop, item.step) def __delitem__(self, key): print('delitem') # 中括号语法自动执行 getitem 方法 obj = Foo() obj['ab'] # 中括号并且赋值执行 setitem 方法 obj['k1'] = 111 del obj['k1'] # 切片也是去执行 setitem 方法 obj[1:6:2] # 输出 setitem delitem getitem 1 6 2
class Bar: pass class Foo(Bar): # 返回一个可迭代对象 def __iter__(self): # return iter([11, 22, 33, 44]) yield 1 yield 2 obj = Foo() for item in obj: print(item) # 查看 obj 是否是 Foo 的实例 ret = isinstance(obj, Foo) # 也可以查看是否是 父类 的实例 # ret = isinstance(obj, Bar) print(ret) # 查看 Foo 是否为 Bar 的子类 ret1 = issubclass(Foo, Bar) print(ret1) # 输出 1 2 True True
class C1: def f1(self): print('c1.f1') class C2(C1): def f1(self): # 主动执行父类的 f1 方法 super(C2, self).f1() print('c2.f1') obj = C2() obj.f1() # 输出: c1.f1 c2.f1
目录 backend - commons.py index.py lib.py setting.py commons.py >> class Foo: def f1(self): print('Foo.f1') index.py >> from setting import ClassName from setting import Path def execute(): model = __import__(Path, fromlist=True) cls = getattr(model, ClassName) obj = cls() obj.f1() if __name__ == '__main__': execute() setting >> # Path = "backend.commons" # ClassName = 'Foo' Path = "lib" ClassName = 'MyFoo' lib >> from backend.commons import Foo class MyFoo(Foo): def f1(self): print('before') super(MyFoo, self).f1() print('after') 这样运行我们自己添加的lib 时结果如下 before Foo.f1 after
以上がオブジェクト指向による自動運用保守の詳しい解説 Pythonシリーズの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

この記事では、Pythonにおける仮想環境の役割について説明し、プロジェクトの依存関係の管理と競合の回避に焦点を当てています。プロジェクト管理の改善と依存関係の問題を減らすための作成、アクティベーション、およびメリットを詳しく説明しています。
