亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Pembinaan (__baru__) dan permulaan (__init__)

Melalui kandungan artikel sebelum ini, kita sudah tahu bahawa apabila mentakrifkan kelas, kita sering menggunakan kaedah __init__(self) untuk menetapkan atribut apabila membuat instantiation objek. Contohnya, contoh berikut:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class User(object):
    def __init__(self, name, age):
        self.name = name;
        self.age = age;
user=User('兩點水',23)

Sebenarnya, proses mencipta kelas terbahagi kepada dua langkah Satu ialah mencipta objek kelas, dan satu lagi adalah untuk memulakan kelas. __new__ digunakan untuk mencipta kelas dan mengembalikan contoh kelas ini, manakala __init__ hanya memulakan contoh dengan parameter yang diluluskan __new__ pasti akan dipanggil semasa proses mencipta contoh, tetapi __init__ tidak semestinya dipanggil, seperti melalui. jeruk Apabila menyahsiri contoh menggunakan .load, kaedah __init__ tidak akan dipanggil.

0c41739cbc728401d6b87605a65a7e9.png

def __new__(cls) dipanggil sebelum kaedah def __init__(self), dan fungsinya adalah untuk mengembalikan objek contoh. Perkara lain yang perlu diambil perhatian ialah kaedah __new__ sentiasa perlu mengembalikan contoh kelas, dan __init__ tidak boleh mengembalikan sebarang nilai kecuali Tiada

Contoh khusus:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class User(object):
    def __new__(cls, *args, **kwargs):
        # 打印 __new__方法中的相關(guān)信息
        print('調(diào)用了 def __new__ 方法')
        print(args)
        # 最后返回父類的方法
        return super(User, cls).__new__(cls)
    def __init__(self, name, age):
        print('調(diào)用了 def __init__ 方法')
        self.name = name
        self.age = age
if __name__ == '__main__':
    usr = User('兩點水', 23)

Lihat hasil output:

調(diào)用了 def __new__ 方法
('兩點水', 23)
調(diào)用了 def __init__ 方法

Dengan mencetak Berdasarkan keputusan , kita boleh tahu bagaimana proses mencipta kelas Pertama, kaedah __new__ dipanggil untuk mencipta objek, dan parameter dihantar ke kaedah __init__ untuk instantiasi.

Malah, dalam pembangunan sebenar, kaedah __new__ jarang digunakan melainkan anda mahu dapat mengawal penciptaan kelas. Biasanya apabila bercakap tentang __new__, semuanya melibatkan metaclass.

Sudah tentu apabila kitaran hayat sesuatu objek tamat, kaedah __del__ pemusnah akan dipanggil. Tetapi kaedah ini digunakan oleh Python sendiri untuk mengumpul objek sampah.


Meneruskan pembelajaran