subtype secara literalnya 子类 Gunakan issubclass(cls1, cls2) untuk menentukan sama ada cls1 ialah subkelas cls2
Walaupun saya tidak pasti versi
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__')
Penerokaan mendalam
Sebenarnya, tumpuan di sini bukanlah
, tetapi apakah atribut
itu.subtype__new__Ringkasnya,
mengawal penciptaan objek, manakala
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
, semestinya mencipta objek
?n = N()NJawapannya 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__
Walaupun saya tidak pasti versisubtype
secara literalnya子类
Gunakanissubclass(cls1, cls2)
untuk menentukan sama adacls1
ialah subkelascls2
yang anda gunakan dan dokumen mana yang
Penerokaan mendalam , tetapi apakah atributpython
anda memintas, menurut penjelasan rasmi,T.__new__(S, ...)
hanya mencipta objek contohX.__init__(Y, ...)
dan tiada kaitan denganY
. Premisnya ialahX
mempunyai atributX
, yang boleh dinilai oleh__new__
hasattr(X, '__new__')
itu.
mengawal penciptaan objek, manakalasubtype
__new__
Ringkasnya,mengawal pemulaan objek (seperti menambah pembolehubah atribut tambahan), dan
, semestinya mencipta objek__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.Apabila
mengembalikan objek, objek dan parameter berlebihan akan dihantar keobjek untuk permulaan selepas penciptaan.
Mengenai fungsi__new__
__init__
?
__new__
cls
Ini melibatkan satu lagi ciri penting , iaitu,tidak mempunyai kaedah, hanya berfungsi Apabila melaksanakan
python
, ia sebenarnya melaksanakanpython
dahulu, dan kemudianP()
.p1 = P.__new__(P)
P.__init__(p1)
Ringkasnya, tiada kaitan dengan, sama seperti
Arahan tambahan fungsi sahaja, adalah disyorkan untuk membaca artikel saya untuk memahami kelas dalam Ruby.T.__new__(S, ...)
hanya mengembalikan atributT
hello
, yang serupa denganself
dan tiada kaitan dengannyaname
X
python
2, kod di atas telah disahkan dalam versiterdapat sedikit perbezaan
python3