python classに新しいプロパティとメソッドを追加
2979 ワード
継承:
__slots__: タプル、リスト、反復可能オブジェクト
クラスに多数のインスタンスを作成する必要がある場合は、_slots_インスタンスに必要なプロパティを宣言できます.
slotsは主にメモリと属性のアクセス速度を最適化したり、サブクラスの属性を制限したりするのに使用されますが、これは主な用途ではありません.
MethodType:
インスタンスに個別に動的にメソッドを追加するには、次の手順に従います.
クラスへの動的バインド方法:
>>> class Point(namedtuple('Point', ['x', 'y'])):
... __slots__ = ()
... @property
... def hypot(self):
... return (self.x ** 2 + self.y ** 2) ** 0.5
... def __str__(self):
... return 'Point: x=%6.3f y=%6.3f hypot=%6.3f' % (self.x, self.y, self.hypot)
>>> for p in Point(3, 4), Point(14, 5/7):
... print(p)
Point: x= 3.000 y= 4.000 hypot= 5.000
Point: x=14.000 y= 0.714 hypot=14.018
__slots__: タプル、リスト、反復可能オブジェクト
クラスに多数のインスタンスを作成する必要がある場合は、_slots_インスタンスに必要なプロパティを宣言できます.
slotsは主にメモリと属性のアクセス速度を最適化したり、サブクラスの属性を制限したりするのに使用されますが、これは主な用途ではありません.
__slots__
,__slots__
,
MethodType:
class Student:
pass
s = Student()
インスタンスに個別に動的にメソッドを追加するには、次の手順に従います.
def func(self, x):
print(x)
from types import MethodType
s.func = MethodType(func, s, Student)
クラスへの動的バインド方法:
def set_score(self, score):
self.score = score
Student.set_score = MethodType(set_score, None, Student)