そのようなプロパティを実装するには、オブジェクトの属性を定義する必要があります。そこで行っているのは、Comment というクラスの定義ですが、そのオブジェクトの属性は定義せず、クラス自体に定義します。
小さな例でデモンストレーションしましょう:
class ExampleClass:
name = "Example Object"
a = ExampleClass() # Init new instance of ExampleClass
print(a.name) # a doesn't own an attribute called "name"
print(ExampleClass.name) # --> "Example Object"
上記の例では、クラスを定義し、それに値を持つExampleClass
変数を与えています。その後、オブジェクトを作成しますが、 name 属性を取得しません。これは、オブジェクトではなく、クラス自体に対して属性が定義されているためです。name
Example Object
a = ExampleClass()
この問題を解決するに__init__
は、そのクラスのオブジェクトが作成されるたびに呼び出される -method 内で名前を定義します。
class ExampleClass:
def __init__(self):
self.name = "Example Class"
a = ExampleClass() # Init new instance of ExampleClass
print(a.name) # --> "Example Class"
print(ExampleClass.name) # --> ERROR: Exampleclass.name doesn't exist
そこでもう一度定義しますが、そのメソッドExampleClass
も定義します。__init__
Init メソッドはself
、関数に自動的に与えられる 1 つのパラメーターのみを受け取ります。作成中のオブジェクトです。次にself.name = "Example Class"
、 を設定します。self はオブジェクトそのものなので、オブジェクトの属性を設定しますname
。
プロパティの作成
属性のセッターとゲッターを実装するには、以下を追加します。
class ExampleClass:
def __init__(self):
self.name = "Example Class"
@property
def name(self):
if not self._name:
pass #blabla code here
return self._name
@name.setter
def name(self, value):
#blabla more code
self._name = value
また、パラメーターとして__init__
受け取るメソッドも編集する必要があります。name
def __init__(self, name="Example Object"):
self.name = name