__new__
方法
__new__
方法是一个静态方法,用于创建并返回一个新的对象实例。它通常在创建新实例时调用,并且总是在 __init__
方法之前调用。_
_new__
方法接收的第一个参数是类本身(Class),而不是实例对象,随后的参数与 __init__
方法接收的参数类似。
示例:
class Student(object):
def __init__(self,name,age) -> None:
self.name=name
self.age=age
print("----init start----")
# self是对象本身
print(self)
print("----init end----")
#执行初始化前的操作
def __new__(cls,*args, **kwargs) :
print("-------_new start_----")
# cls是Student这个类
print(cls)
print(args)
print(kwargs)
print("-------_new end_----")
#负责执行init方法,调用Object的new,再调用init方法
return object.__new__(cls)
p=Student("Recardo",17)
p2=Student(name="Nuonuo",age=18)
结果
-------_new start_----
<class '__main__.Student'>
('Recardo', 17)
{}
-------_new end_----
----init start----
<__main__.Student object at 0x000001C67F902C10>
----init end----
-------_new start_----
<class '__main__.Student'>
()
{'name': 'Nuonuo', 'age': 18}
-------_new end_----
----init start----
<__main__.Student object at 0x000001C67F902C90>
----init end----
__call__
方法
__call__
方法允许类的实例像函数一样被调用。当实例后面跟着括号和参数时,Python 会自动调用该实例的 __call__
方法。
示例
class CallableClass:
def __call__(self, *args, **kwargs):
print("Instance of CallableClass is being called")
print(f"Arguments: {args}, Keyword arguments: {kwargs}")
# 创建CallableClass的实例
callable_instance = CallableClass()
# 调用实例,就像调用函数一样
callable_instance(1, 2, 3, a=4, b=5)
结果:
Instance of CallableClass is being called
Arguments: (1, 2, 3), Keyword arguments: {'a': 4, 'b': 5}