python Metapengaturcaraan ialah teknik pengaturcaraan lanjutan yang membolehkan pembangun mengubah suai kod Python itu sendiri semasa masa jalan. Ini membawa fleksibiliti dan dinamisme yang hebat kepada Python, menjadikannya ideal untuk membina aplikasi yang kompleks dan berskala.
class Meta(type): def __new__(cls, name, bases, attrs): attrs["new_attr"] = "new value" return super().__new__(cls, name, bases, attrs) class MyClass(metaclass=Meta): pass obj = MyClass() print(obj.new_attr)# Output: "new value"
def create_class(name, bases, attrs): return type(name, bases, attrs) def create_instance(cls, *args, **kwargs): obj = cls.__new__(cls) cls.__init__(obj, *args, **kwargs) return obj MyClass = create_class("MyClass", (), {}) obj = create_instance(MyClass)
class MyClass: def __init__(self, name): self.name = name def greet(self): print(f"Hello, {self.name}!") def modify_class(cls): cls.new_attr = "new value" def new_greet(self): print(f"Modified greeting: {self.name}!") cls.greet = new_greet modify_class(MyClass) obj = MyClass("John") obj.greet()# Output: "Modified greeting: John!"
def log_method_calls(cls): def wrapper(self, *args, **kwargs): print(f"Calling method {self.__class__.__name__}.{self.__class__.__qualname__}") return cls.__call__(self, *args, **kwargs) cls.__call__ = wrapper return cls @log_method_calls class MyClass: def __init__(self, name): self.name = name def greet(self): print(f"Hello, {self.name}!") obj = MyClass("John") obj.greet()# Output: "Calling method MyClass.MyClass"
class Proxy(object): def __init__(self, obj): self._obj = obj def __getattr__(self, name): return getattr(self._obj, name) def __setattr__(self, name, value): setattr(self._obj, name, value) class MyClass: def __init__(self, name): self.name = name def greet(self): print(f"Hello, {self.name}!") obj = MyClass("John") proxy = Proxy(obj) proxy.greet()# Output: "Hello, John!"
Python metaprogramming menyediakan pembangun dengan alat yang berkuasa, membolehkan mereka mencipta aplikasi dinamik, fleksibel dan berskala. Dengan memahami dan mahir menggunakan teknik pengaturcaraan meta, pembangun boleh memaksimumkan keupayaan Python.
Atas ialah kandungan terperinci Perjalanan ke dalam pemrograman meta Python: penerokaan sihir yang tidak terhingga. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!