第8章 面向对象

8.1 类的定义与使用

8.1.1 类定义

Python 使用 class 关键字来定义类。类名的首字母一般使用大写。

class 类名:

定义了类之后,可以用来实例化对象,并通过“对象名.成员”的方式来访问其中的数据成员或方法。实例化对象如下:

变量 = 类名()

可以使用内置方法 isinstance() 测试一个对象是否为某个类的实例。最后,Python 提供一个 pass 关键字,类似于空语句,可以用在类和函数的定义中或选择结果中。当暂时没有确定如果实现功能,或为以后的软件升级预留空间时,可以使用该关键字来“占位”。

8.1.2 self 参数

类的所有实例方法都必须至少有一个名为 self 的参数,并且必须是方法的第一个形参,self 参数表示对象本身。在类的实例方法中访问实例属性时需要以 self 为前缀,但在外部通过对象名调用对象时并不需要传递这个参数。

8.1.3 类成员和实例成员

这里主要指数据成员,或者广义上的属性。可以说属性有两种:实例属性和类属性。实例属性一般是指在构造函数 init() 中定义的,定义和使用必须使用 self 作为前缀;类属性是在类中所有方法之外定义的数据成员。实例属性属于实例(对象),只能通过对象名访问;而类属性属于类,可以通过类名或对象名访问。

8.1.4 私有成员和公有成员

在定义类属性时,如果属性名以两个下划线“__”开头则表示是私有属性。私有属性在类的外部不能直接访问,需要通过调用对象的公有成员方法来访问。

在 Python 中,以下划线开头的变量名或方法名有特殊含义,尤其是在类的定义中,用下划线作为变量名和方法名前缀和后缀来表示类的特殊成员:
(1)_xxx:这样的对象叫做保护成员,不能用“from module import *”导入,只有类对象和子类对象能访问这些成员。
(2)xxx:系统定义的特殊成员。
(3)__xxx:类中的私有成员,只有类对象自己能访问,子类对象也不能访问

8.2 方法

在类中定义的方法可以粗略分为四大类:公有方法、私有方法、静态方法和类方法。其中,公有方法和私有方法属于对象,私有方法的名字以两个下划线“__”开始。

类方法:
@classmethod
def 方法名(cls):
    方法体
一般将 cls 作为类方法的第一个参数名称,并且在调用类方法时不需要为该参数传递值。

静态方法:
@staticmethod
def 方法名():
    方法体

8.3 属性

定义类和属性:

class Test:
    def __init__(self, value):
        self.__value = value
  1. 只读属性:
@property
def value(self):
    return self.__value
  1. 可读可修改属性:
def __get(self):
    return self.__value

def __set(self, v):
    self.__value = v

value = property(__get, __set)
  1. 可读可修改可删除属性:
def __get(self):
    return self.__value

def __set(self, v):
    self.__value = v

def __del(self):
    del del self.__value

value = property(__get, __set, __del)

8.4 继承

派生类可以继承父类的公有成员,但不能继承其私有成员。如果需要在派生类中调用父类的方法,可以使用内置函数 super() 或通过“父类名.方法名()”的方式来实现。继承语法如下:

class 子类名(父类名):

你可能感兴趣的:(第8章 面向对象)