Exception AttributeError:''NoneType'object has no attributeエラー
2443 ワード
出現:Exception AttributeError:''NoneType'object has no attribute
最近『Pythonリファレンスマニュアル』を勉強してClass部分を学び、クラスの構造分析部分の問題に遭遇した.
1、いつ作りますか.
2、いつ構造を分析しますか.
3、メンバー変数はどのように処理しますか?
4、Pythonの共有メンバー関数はどのようにアクセスしますか?
------------------------
探索プロセス:
1、Pythonには専用の構造と構造関数はありませんが、一般的には_init__および_del__この代替構造とプロファイルを使用して、初期化と削除操作をそれぞれ完了します.もう一つ_new__クラスの作成プロセスをカスタマイズしますが、ここでは説明しません.
2、クラスのメンバー関数のデフォルトはpublicに相当しますが、デフォルトの先頭は__です.プライベート変数はプライベート変数ですが、Pythonには本当のプライベート変数は存在しません.次のようになります.
1
3、self._を通してclass__クラス自体にアクセスし、共有メンバー変数(self.)にアクセスします.class__.num_クラスのNewClassをnum_count置換self._class__.num_countコンパイル実行:
class Person:
'''Represents a person.'''
population = 0
def __init__(self,name):
'''Initializes the person's data.'''
self.name = name
print '(Initializing %s)' % self.name
Person.population += 1
def __del__(self):
'''I am dying.'''
print '%s says bye.' % self.name
#Person.population-=1#の最初はこのように定義されています
self.__class__.population-=1##これで間違いなし
if self.__class__.population == 0:
print 'I am the last one.'
else:
print 'There are still %d people left.' % self.__class__.population
def sayHi(self):
print 'Hi, my name is',self.name
def howMany(self):
if Person.population == 1:
print 'I am the only person here.'
else:
print 'We have %d persons here.' % Person.population
swaroop = Person('Swaroop')
swaroop.sayHi()
swaroop.howMany()
kalam = Person('Abdul Kalam')
kalam.sayHi()
kalam.howMany()
swaroop.sayHi()
swaroop.howMany()
本の上でまたいくつかの問題に言及して、ここで補充します(参考にします):
__new__()は、インスタンスの作成前に実行される唯一の方法であり、一般的にメタクラスを定義する際に使用されます.del xxxはアクティブに呼び出されません_del__メソッド、参照カウント=0の場合のみ、_del__()は実行され、定義されています.del_()のインスタンスはPythonのリサイクルゴミ収集器で収集できないので、できるだけカスタマイズしないでください_del__().一般的に、_del__()ゴミ処理装置は破壊されません.
実験でゴミ回収が自動的に呼び出されたことが判明しました_del__, これは本の中の言うことと合わないし、どういうわけか、勉強を続けなければならない.
最近『Pythonリファレンスマニュアル』を勉強してClass部分を学び、クラスの構造分析部分の問題に遭遇した.
1、いつ作りますか.
2、いつ構造を分析しますか.
3、メンバー変数はどのように処理しますか?
4、Pythonの共有メンバー関数はどのようにアクセスしますか?
------------------------
探索プロセス:
1、Pythonには専用の構造と構造関数はありませんが、一般的には_init__および_del__この代替構造とプロファイルを使用して、初期化と削除操作をそれぞれ完了します.もう一つ_new__クラスの作成プロセスをカスタマイズしますが、ここでは説明しません.
2、クラスのメンバー関数のデフォルトはpublicに相当しますが、デフォルトの先頭は__です.プライベート変数はプライベート変数ですが、Pythonには本当のプライベート変数は存在しません.次のようになります.
1
__priValue
=
0
# "_ __priValue"
3、self._を通してclass__クラス自体にアクセスし、共有メンバー変数(self.)にアクセスします.class__.num_クラスのNewClassをnum_count置換self._class__.num_countコンパイル実行:
class Person:
'''Represents a person.'''
population = 0
def __init__(self,name):
'''Initializes the person's data.'''
self.name = name
print '(Initializing %s)' % self.name
Person.population += 1
def __del__(self):
'''I am dying.'''
print '%s says bye.' % self.name
#Person.population-=1#の最初はこのように定義されています
self.__class__.population-=1##これで間違いなし
if self.__class__.population == 0:
print 'I am the last one.'
else:
print 'There are still %d people left.' % self.__class__.population
def sayHi(self):
print 'Hi, my name is',self.name
def howMany(self):
if Person.population == 1:
print 'I am the only person here.'
else:
print 'We have %d persons here.' % Person.population
swaroop = Person('Swaroop')
swaroop.sayHi()
swaroop.howMany()
kalam = Person('Abdul Kalam')
kalam.sayHi()
kalam.howMany()
swaroop.sayHi()
swaroop.howMany()
本の上でまたいくつかの問題に言及して、ここで補充します(参考にします):
__new__()は、インスタンスの作成前に実行される唯一の方法であり、一般的にメタクラスを定義する際に使用されます.del xxxはアクティブに呼び出されません_del__メソッド、参照カウント=0の場合のみ、_del__()は実行され、定義されています.del_()のインスタンスはPythonのリサイクルゴミ収集器で収集できないので、できるだけカスタマイズしないでください_del__().一般的に、_del__()ゴミ処理装置は破壊されません.
実験でゴミ回収が自動的に呼び出されたことが判明しました_del__, これは本の中の言うことと合わないし、どういうわけか、勉強を続けなければならない.