Python之面向對象:類的內置方法


1、def __add__(self,other):
c1+c2 兩個實例的加法操作就是執行__add__()方法
2、__str__(self):
print一個實例的時候,執行的是__str__()這個內置方法
eg:
class Vector(object):
     def __init__(self,a,b):
         self.a = a
         self.b = b
     def __str__(self):
         return 'Vector(%d,%d)'%(self.a,self.b)
     def __add__(self, other):
          return Vector(self.a+other.a, self.b+other.b)
 
v1 = Vector(2,8)
v2 = Vector(4,98)
# print v1 + v2
v3 = v1 + v2
print v3
print v1#
 
3、__del__()
實例消亡的時候執行
4、類的幫助信息 三引號中的內容
__doc__
''' Production of the class A
attr:
method:
'''
5、類的實例屬性是字典的時候,使用以下三個方法
__getitem__() :返回當前的實例屬性的字典值
__setitem__():屬性中的key和value重新賦值
__delitem__():刪除實例屬性中的某個字典key和value值
 
class A(object):
'''Production of the class A:
attr:
 
method:
end.'''
#__getitem__
#__setitem__
#__delitem__
class Employee(object):
    def __init__(self,name,salary):
        self.dict1={}
        self.dict1[name]=salary
    def __getitem__(self, key):
         if self.dict1.has_key(key):
             print key,self.dict1[key]
    def __setitem__(self, key, value):
         self.dict1[key]=value
    def __delitem__(self, key):
         if self.dict1.has_key(key):
    del self.dict1[key]
 
e1=Employee('Lily',10000)
e1['Lily']
e1['Jenny']=20000
e1['Jenny']
del e1['Jenny']
e1['Jenny']
 
6、實例屬性是序列的時候,所作的切片操作
__getslice__():對實例屬性做切片
__setslice__():
__delslice__():
 
7、__call__(self,*args,**kwargs)
通過實例對__call__方法重寫 e1(1,2,3,a='abc')
 
8、__dict__ 返回屬性和方法
Employee.__dict__ :類屬性和所有的方法
e.__dict__ 實例屬性和類的指針
 
9、__iter__() 使用迭代器,返回迭代器的內容時,就是調用了__iter__方法,返回一個迭代器
def __iter__(self):
    return iter(self.list1[:])
eg:
class Employee(object):
    def __init__(self,name,salary):
        self.list1=[]
    def __getslice__(self,i,j):
        return self.list1[i:j]
    def __setslice__(self, i, j, sequence):
         self.list1[i:j]=sequence
    def __delslice__(self, i, j):
          del self.list1[i,j]
    def __iter__(self):
         return iter(self.list1[:])
 
e1=Employee('Lily',10000)
e1[:4]='fjwioefjior'
print e1[:]
for i in e1:
    print i
10、__new__(cls,*args,**kwargs):
new的時候才生成了實例,所以是類方法
return object.__new__(cls,*args,**kwargs)
a=A() 這個時候會默認先執行__new__這個內置方法
使用在單例(只有一個實例)這種設計模式中:
通過 __new__方法實現單例的思路:創建實例之前,判斷是否創建過,如果有,不重新創建,沒有則重新創建
#__new__
class A(object):
    def __init__(self,a):
        print 'init method'
       self.a = a
   def __new__(cls, *args, **kwargs):
        if not hasattr(cls,'_instance'):
            cls._instance = object.__new__(cls,*args, **kwargs)
   return cls._instance
 
之前是否創建過實例,如果有,則不重新創建,如果沒有,則重新創建
a1 = A(4)
print a1.a # 4
a2 = A(6)
print a2.a # 6
print a1.a # 6
實例屬性是同一個,但是每次實例化的時候,還會再執行__init__()方法
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM