Python 內建的object物件 1

2021-07-28 23:13:32 字數 3124 閱讀 2117

新式類都有乙個__new__的靜態方法,它的原型是object.__new__(cls[, ...])

cls是乙個類物件,當呼叫c(*args, **kargs)來建立乙個類c的例項時,python的內部呼叫是 :

c.__new__(c, *args, **kargs)然後返回值是類c的例項c

確認c是c的例項後

python再呼叫c.__init__(c, *args, **kargs)來初始化例項c

所以呼叫乙個例項c = c(2),實際執行的**為:

c = c.__new__(c, 2) 

if isinstance(c, c):

c.__init__(c, 23)#__init__第乙個引數要為例項物件

object.__new__()建立的是乙個新的,沒有經過初始化的例項。當重寫__new__方法時,可以不用使用裝飾符@staticmethod指明它是靜態函式,直譯器會自動判斷這個方法為靜態方法。如果需要重新繫結c.__new__方法時,只要在類外面執行c.__new__ = staticmethod(yourfunc)就可以了。

此外,如果(新式)類中沒有重寫__new__()方法,即在定義新式類時沒有重新定義__new__()時,python預設是呼叫該類的直接父類的__new__()方法來構造該類的例項,如果該類的父類也沒有重寫__new__(),那麼將一直按此規矩追溯至object的__new__()方法,因為object是所有新式類的基類。

如果__new__()沒有返回cls(即當前類)的例項,那麼當前類的__init__()方法是不會被呼叫的。如果__new__()返回其他類(新式類或經典類均可)的例項,那麼只會呼叫被返回的那個類的構造方法。

class

c(object):

def__new__

(cls,*args,**kwargs):

print(cls)

print(args)

print(kwargs)

#這裡並沒有返回乙個instance,所以__init__不會被呼叫

def__init__

(self,a,b):

print('__init__ called')

print('self is', self)

self.a=a

self.b=b

a=c(1,2)

執行的結果是:

(1, 2)

{}

class

c(object):

def__new__

(cls,*args,**kwargs):

print(cls)

print(args)

print(kwargs)

new_instance = object.__new__(cls)

return new_instance

#返回乙個instance,之後__init__被呼叫

def__init__

(self,a,b):

print('__init__ called')

print('self is', self)

self.a=a

self.b=b

a=c(1,2)

執行的結果是:

(1, 2)

{}__init__ called

self is <__main__.c object

at 0x7fef84b0a438>

print(someobj)會呼叫someobj.str(), 如果str沒有定義,則會呼叫someobj.repr().

>>> 

class

point:

...

def__init__

(self, x, y):

... self.x, self.y = x, y

...

def__repr__

(self):

...

return

'point(x=%s, y=%s)' % (self.x, self.y)

>>> p = point(1, 2)

>>> p

point(x=1, y=2)

class

c:def

__init__

(self):

self.classattr = 'attr on class'

def__repr__

(self):

print('call __repr__')

return self.classattr

def__str__

(self):

print('call __str__')

return self.classattr

cobj = c()

cobj.instattr = "attr on instance"

cobj

# call __repr__

# attr on class

print(cobj)

# call __str__

# attr on class

repr(cobj)

# call __repr__

# attr on class

js內建物件 Object

js中的一些內建方法還是挺好用的,使用它們有時候會節省我們很多時間,還有減少 量 一 object.keys obj 獲取乙個物件的key值,但是引數obj必須是可列舉的物件,他會返回乙個包含物件自身的所有可列舉屬性值的陣列。let obj abc 123 let keys object.keys ...

python內建函式 python的內建函式 方法

1 input 輸入內容時要將內容用引號引起來 input 請輸入密碼 input 請輸入登入名 name input 請輸入姓名 print hello,name 請輸入姓名 binla hello,binla 在列表後邊追加乙個元素 3 extend 在列表之後追加乙個列表 4 insert 位...

python內建類 Python 類的內建方法

usr bin env python coding utf 8 python內建方法 class a n a def f2 self print from a class b a n b def f1 self print from b def f2 self print f2 from b cla...