python中的__new__和 __init__方法

魔法方法,重载方法,重载了一些内置的操作,一些等价于重载运算符
__new__ 为构造函数
__init__ 为初始化函数

点击查看代码
class MyClass:
    """
    静态成员变量
    静态成员变量是被类的所有实例共享的
    访问方式:通过类名.
    """
    my_static_variable=0
    """
    类的实例可以访问以下三种方法
    类本身可以访问类方法、静态方法、但不能访问实例方法
    类名能调用的变量和方法都是全部类实例共享的
    """
    # 实例方法 self:代表类的实例
    def my_normal_method(self,num1,num2):
        pass
        # self.normal_variable
        # MyClass.my_static_variable=1

    # 类方法 cls:代表类这个名称本身
    @classmethod
    def my_class_method(cls,num1,num2):
        MyClass.my_static_variable=1
        pass
    # 静态方法 不能传递类的实例self,也不能传递类本身cls
    @staticmethod
    def my_static_method(num1,num2):
        pass

    """
    魔法方法,重载方法,重载了一些内置的操作,一些等价于重载运算符
    """
    # 构造函数
    def __new__(cls, *args, **kwargs):
        print("构造函数被调用了")
        cls.xxx=1
        return super(MyClass, cls).__new__(cls,*args,**kwargs)
    # 初始化函数
    def __init__(self):
        super().__init__()
        self.normal_variable=2
        print("初始化函数被调用了")

    def __getattr__(self, item):
        print("__getattr__")

    def __setattr__(self, key, value):
        print("__setattr__")

    def __delattr__(self, item):
        print("__delattr__")

    def __getitem__(self, item):
        print("__getitem__")

    def __add__(self, other):
        print("__add__")

    def __len__(self):
        print("__len__")

    def __repr__(self):
        print("__repr__")

    def __iter__(self):
        print("__iter__")

    def __next__(self):
        print("__next__")

    def __call__(self, *args, **kwargs):
        print("__call__")

class A:
    def __init__(self):
        # public 子类可以调用父类的public方法或成员,类实例化后可以使用public的方法或成员
        self.x=0
        """
        只有A类本身和它的子类可以访问,其他无关类和实例化后都无法访问
        python比较特殊,python的protected成员可以通过实例化访问
        可有可无,它的作用其实只有提示作用,当看这个类的源码的时候,可以通过这个变量的前置下划线来知道这个变量是一个受保护的变量
        它不能显式的被外界调用
        """
class B(A):
    def __init__(self):
        super().__init__()
        print(f"__x:{self.__x}")

if __name__ == '__main__':

    my_class=MyClass()

    # myclass1=MyClass()
    # myclass2=MyClass()
    # print(MyClass.my_static_variable)
    # myclass1=MyClass()
    # myclass1.my_normal_method(1,2)
    # MyClass.my_static_method(1,2)
    # MyClass.my_class_method(1,2)


# See PyCharm help at https://www.jetbrains.com/help/pycharm/

posted @ 2024-06-17 17:10  阳光天气  阅读(10)  评论(0)    收藏  举报