私有与静态类

一、私有属性和方法

在属性和方法的名称前加上双下划线即可。

图片[1] - 私有与静态类 - 正则时光

可以看到在实例中无法查看到类中定义的私有属性和方法。

二、静态类

可以创建实例的类叫做动态类,不支持实例化的类叫做静态类。

静态类的特点:

  • 静态类内部没有self关键字,不能被实例化
  • 静态类不能通过类名传递参数
  • 静态类不支持__init__()初始化函数

可以理解为一些变量和方法的集合。直接通过类名来调用方法和变量

图片[2] - 私有与静态类 - 正则时光

三、静态属性、类属性、成员属性

类属性与静态属性是同一个概念,在类级别定义的属性,不依赖于实例。

name = "Bob"  # 可以叫静态属性,也可以叫类属性
self.name = "Bob"   # 带有self的

四、静态方法、类方法、成员方法

    def static_method():    # 1.类中不带self,cls的可以被当作静态方法
        print("my name is " + MyClass.name +"and my age is " + str(MyClass.age))

    @staticmethod    # 使用 @staticmethod 装饰器定义,不依赖于实例,不需要 self 参数。
    def static_method2():
        print("I am a static method")

    @classmethod     # 使用 @classmethod 装饰器定义,不依赖于实例,第一个参数是类本身(通常命名为 cls)。
    def class_method(cls):    
        print("I am a class method and my name is " + cls.name)

    def public_method(self):    # 方法带self的为成员方法
        print("My name is " + self.name + " and my age is " + str(self.age) + " and my favorite color is " + 
        self.favorite_color)

静态方法与类方法的区别

  • 静态方法不需要隐含参数,类方法需要cls。
  • 静态方法不能访问实例属性或方法,也不能访问类属性或方法(除非通过类名显式访问)。
  • 静态方法用于定义与类相关但不依赖于实例的操作,例如工具函数。类方法用于定义与类相关且需要访问类属性的操作,例如工厂方法。

五、综合示例

图片[3] - 私有与静态类 - 正则时光
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享