一、静态函数和类函数
类成员函数均与实例绑定,只能通过对象访问而不能通过类名访问。Python 中支持两种基于类名访问成员的函数:静态函数和类函数,它们的不同点是类函数有一个隐性参数 cls 可以用来获取类信息,而静态函数没有该参数。
静态函数使用装饰器 @staticmethod 定义,类函数使用装饰器 @classmethod 定义。
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 使用指定变量名格式的方法定义私有成员,即所有以双下划线 “__” 开始命名的成员都为私有成员。
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