pythonベースなどの一般的な組み込み方法

3525 ワード

一、_del__(self):オブジェクトが消えたときにこのメソッドを呼び出します.
>>> class cat(object):
	def __del__(self):
		print(" ")

>>> import sys
>>> cat1=cat()            # cat1
>>> sys.getrefcount(cat1) # , 1, 2
2
>>> cat2=cat1             # , 3
>>> sys.getrefcount(cat1)
3
>>> sys.getrefcount(cat2)
3
>>> del cat1              # ,cat1  ,cat2 , 2
>>> sys.getrefcount(cat2)
2
>>> del cat2              # , , , __del__() 
 

二、クラスメソッド@classmethod
>>> class test(object):
	def show(self):
		print("This is a class")
	@classmethod  # 
	def way(cls):
		print("This is a class method")
>>> a=test()
>>> a.way()  # 
This is a class method
>>> test.way()   # 
This is a class method

三、静的方法:@staticmethod、一般的にクラスに関係なくオブジェクトに関係なく使用する
>>> class test(object):
	def show(self):
		print("This is a class")
	@staticmethod  # 
	def way( ): # 
		print("This is a static method")
>>> a=test() 
>>> a.way()  # 
This is a static method
>>> test.way()  # 
This is a static method

四、_new__()メソッド:オブジェクトを作成する静的メソッドinit__()オブジェクトの初期化
>>> class test(object):
	def show(self):
		print("This is show function")	
>>> a=test()  # __new__() , __new__() , 。 __init__() 。

サブクラスでの書き換え_new__()メソッド、親を呼び出す_new__()メソッドでは、オブジェクトの参照を返すには、オブジェクトが作成されます. 
書き換え_new__()メソッド、単一のインスタンスを作成できます
 , __new__() 
>>> class shit(object):
	def show(self):
		print("-----show----")
	def __new__(cls):
		print(" new ")
>>> a=shit()
 new 
>>> a.show() # __new__(cls) , 
Traceback (most recent call last):
  File "", line 1, in 
    a.show()
AttributeError: 'NoneType' object has no attribute 'show'
  __new__(cls) , 
class shit(object):
	def show(self):
		print("-----show----")
	def __new__(cls):
		print(" new ")
		object.__new__(cls)		
>>> a=shit()
 new 
>>> a.show()
Traceback (most recent call last):
  File "", line 1, in 
    a.show()
AttributeError: 'NoneType' object has no attribute 'show'
  , __new__() 
>>> class shit(object):
	def show(self):
		print("-----show----")
	def __new__(cls):
		print(" new ")
		return object.__new__(cls)  # __new__(cls) 
>>> a=shit()
 new 
>>> a.show()
-----show----

五、_slots__メソッド:オブジェクトのプロパティとメソッドの動的追加を制限する
>>> class student(object):
	__slots__=["name","age"]               # 
	def __init__(self,stuName,stuAge):
		self.name=stuName
		self.age=stuAge	
>>> student.Persons=100                    # 
>>> stu1=student("ma dongmei",17)
>>> stu1.gender="girl" 
                                           # , 
Traceback (most recent call last):
  File "", line 1, in 
    stu1.gender="girl"
AttributeError: 'student' object has no attribute 'gender'

についてslot__次の点に注意してください.
  • __slots__オブジェクトのみを制限、クラスを制限しない
  • .
  • __slots__クラスオブジェクトの属性のみならず、クラスオブジェクトを制限する方法
  • __slots__現在のクラスにのみ作用し、継承されたサブクラスには作用しない
  • サブクラスで定義_slots__,サブクラスが定義できる属性は、自身の__です.slots__親を付ける_slots__