Rumah > Soal Jawab > teks badan
T.__new__(S, ...) -> a new object with type S, a subtype of T
这里的subtype指的是什么?
class A(int):
pass
class B(int):
def __new__(cls):
return A.__new__(int)
b = B()
isinstance(b, A)
#False
type(b)
#<class 'int'>
天蓬老师2017-04-17 17:52:46
Jawab soalan
subtype
secara literalnya 子类
Gunakan issubclass(cls1, cls2)
untuk menentukan sama ada cls1
ialah subkelas cls2
yang anda gunakan dan dokumen mana yang python
anda memintas, menurut penjelasan rasmi, T.__new__(S, ...)
hanya mencipta objek contoh X.__init__(Y, ...)
dan tiada kaitan dengan Y
. Premisnya ialah X
mempunyai atribut X
, yang boleh dinilai oleh __new__
hasattr(X, '__new__')
, tetapi apakah atributSebenarnya, tumpuan di sini bukanlah
itu.subtype
__new__
Ringkasnya,
mengawal pemulaan objek (seperti menambah pembolehubah atribut tambahan), dan __new__
mengawal pemusnahan objek Dalam keadaan biasa, anda hanya perlu untuk mengambil berat tentang __init__
.__del__
__init__
Fikirkan tentang soalan, adakah proses instantiasi objek standard, seperti
?n = N()
N
Jawapannya sudah tentu tidak, kodnya adalah seperti berikut untuk menerangkan secara terperinci perbezaan antara mencipta objek dan memulakan objek.
class N:
def __init__(self, name):
self.name = name
class M:
def __new__(cls, name):
return N(name)
m = M("enalix")
isinstance(m, N) #=> true
isinstance(m, M) #=> false
m.name #=> "enalix"
Apabila
mengembalikan objek, objek dan parameter berlebihan akan dihantar ke objek untuk permulaan selepas penciptaan.__new__
__init__
Melangkah lebih jauh, apakah parameter
?__new__
class P:
def __new__(cls):
return cls
P() #=> <class '__main__.P'>, 即类本身
P.__new__(P) #=> 同上
cls
Ini melibatkan satu lagi ciri penting , iaitu, tidak mempunyai kaedah, hanya berfungsi Apabila melaksanakan python
, ia sebenarnya melaksanakan python
dahulu, dan kemudian P()
.p1 = P.__new__(P)
class X:
def hello(self):
return self.name
X.hello(m) #=> "enalix"
P.__init__(p1)
Ringkasnya, tiada kaitan dengan , sama seperti T.__new__(S, ...)
hanya mengembalikan atribut T
hello
, yang serupa dengan self
dan tiada kaitan dengannya name
X
fungsi sahaja, adalah disyorkan untuk membaca artikel saya untuk memahami kelas dalam Ruby.1. Untuk penerangan lanjut tentang
python
2, kod di atas telah disahkan dalam versi
terdapat sedikit perbezaanpython3