首页
学习
活动
专区
圈层
工具
发布

Python进阶-面向对象-下

一、静态函数和类函数

类成员函数均与实例绑定,只能通过对象访问而不能通过类名访问。Python 中支持两种基于类名访问成员的函数:静态函数和类函数,它们的不同点是类函数有一个隐性参数 cls 可以用来获取类信息,而静态函数没有该参数。

静态函数使用装饰器 @staticmethod 定义,类函数使用装饰器 @classmethod 定义。

代码语言:javascript
代码运行次数:0
复制
class MyClass(object):
  
  message = "数据云团"
  
  def __init__(self, name="unset", color="black"):
    print("初始化:", name, color)
    
  def show(self):
    print(self.message)
    print("实例成员变量:", self.name, self.color)
    
  @staticmethod
  def printMessage():
    print("打印消息")
    print(MyClass.message)
  
  @classmethod
  def createObj(cls, name, color):
    print("创建对象:", cls.__name__, name, color)
    return cls(name, color)

定义静态方法 printMessage(),在其中可以访问类成员变量 myClass.message,可以通过类名对它进行调用;

定义类方法 createObj(),类方法定义中的第一个参数必须为隐性参数,在 createObj() 中可以通过隐性参数 cls 替代类名本身,本例中的 createObj 建立并返回了一个 MyClass 实例。

二、私有成员

封装性是面向对象编程的重要特点,Python 也提供了将不希望外部看到的成员隐藏起来的私有成员机制。Python 使用指定变量名格式的方法定义私有成员,即所有以双下划线 “__” 开始命名的成员都为私有成员。

代码语言:javascript
代码运行次数:0
复制
class MyClass(object):
  
  def __init__(self, name="unset", color="black"):
    print("初始化", name, color)
    self.__name = name
    self.__color = color
  
  def __del__(self):
    print(self.__name)
    
inst = MyClass("小团", "White")
del inst
下一篇
举报
领券