Python中_uinit_方法の注意点
3161 ワード
原文の住所:http://www.cnblogs.com/zyxstar2003/archive/2011/03/21/1989954.html
気をつけますinit_C〓〓の中の構造関数に相当しないで、そのを実行する時、実例はすでに構造しました。
1
2
3
4
5
1
1
2
注意2、子類は書き換えなくてもいいです。init_,インスタンス化子クラスの場合、スーパークラスで定義されている_u_u uを自動的に呼び出します。init_
1
2
3
4
5
6
7
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
気をつけますinit_C〓〓の中の構造関数に相当しないで、そのを実行する時、実例はすでに構造しました。
1
2
3
4
5
class
A(
object
):
def
__init__(
self
,name):
self
.name
=
name
def
getName(
self
):
return
'A '
+
self
.name
私たちが実行する時1
a
=
A(
'hello'
)
にあたっては1
2
a
=
object
.__new__(A)
A.__init__(a,
'hello'
)
すなわち_うinit_は、実用化されたオブジェクトを初期化します。注意2、子類は書き換えなくてもいいです。init_,インスタンス化子クラスの場合、スーパークラスで定義されている_u_u uを自動的に呼び出します。init_
1
2
3
4
5
6
7
class
B(A):
def
getName(
self
):
return
'B '
+
self
.name
if
__name__
=
=
'__main__'
:
b
=
B(
'hello'
)
print
b.getName()
でも書き直したら_u u u u uinit_,インスタンス化子クラスの場合、メタクラスで定義されているガイガイを暗黙的に呼び出しません。init_1
2
3
4
5
6
7
8
9
class
C(A):
def
__init__(
self
):
pass
def
getName(
self
):
return
'C '
+
self
.name
if
__name__
=
=
'__main__'
:
c
=
C()
print
c.getName()
「AttributeError:'C'object hasのatribute'name'というエラーがありますので、_init__を書き直したら、超種類の中の行為を使用したり、拡張するために、超種類の__init_メソッドを明示的に呼び出したほうがいいです。1
2
3
4
5
6
7
8
9
class
C(A):
def
__init__(
self
,name):
super
(C,
self
).__init__(name)
def
getName(
self
):
return
'C '
+
self
.name
if
__name__
=
=
'__main__'
:
c
=
C(
'hello'
)
print
c.getName()