はい、組み込みの Python 型にカスタム メソッドと属性を追加できます。たとえば、リスト クラス内に新しいメソッドを定義するとします。
「リスト」クラスを定義し、次のように独自の関数を作成することを考えてみましょう:
class list:
def custom_method (self):
return("Hey, I'm a custom method of list class")
#lets create an object here
obj = list([1,2,3])
print(obj.custom_method())
#The above runs fine, but a list has append() method also right?? let's try it
print(obj.append(1))
"""Now you will get Attribute error : list object has no attribute append()"""
クラス名として「リスト」を持つクラスを定義すると、「リスト」は組み込みクラスではなくユーザー定義クラスとして扱われるため、「組み込みリスト」クラス メソッドにアクセスできなくなるためです。
したがって、このエラーを取り除くために、「リスト」クラスのプロパティ/メンバーを継承し、独自のメソッドまたは属性を定義できます。したがって、このようにして、同じクラス名を使用して、ユーザー定義/組み込みのクラス メソッドを呼び出すことができます。
外観は次のとおりです。
#Extending in-built list class
class list(list):
def custom_method (self):
return("Hey, I'm a custom method of list class")
obj = list([1,2,3])
print(obj.custom_method())
obj.append(1)
print(obj)
正常に実行され、変更されたリストが [1,2,3,1] として出力されます。
注:ただし、このようにすると、長期的には名前の競合などのあいまいな問題が発生する可能性があります
たとえば、ユーザー定義クラス (ここでは「リスト」とします) の組み込み関数と同じシグネチャを持つメソッドがある場合、知らないうちに、または通知なしにオーバーライドされるため、元のメソッドを使用できない場合があります。今後の機能。上記のコードを考えると、 のようなメソッドを定義するとappend(self, value)
、append() の本来の機能が失われます。
したがって、組み込みクラス名と同じ名前ではなく、クラス名に別のクラス名を使用することをお勧めします
たとえば、次のようにクラスを宣言すると、エラーが発生したり、名前の競合に直面したりすることはありません。
class custom_list(list):
def custom_method (self):
return("Hey, I'm a custom method of list class")
obj = custom_list([1,2,3])
print(obj.custom_method())
obj.append(1)
print(obj)