Skip to content

面向对象

在面向对象程序设计中,把数据以及处理数据的方法封装在一起,组成一个整体(对象)


类和对象

类是一种对象模板和数据类型,它定义了对象的属性(数据),并提供用于初始化对象的初始化程序和操作这些属性的方法

对象是类的一个实例,使用构造方法来创建一个对象,使用圆点运算符(.)通过引用方法和变量来访问对象的成员

  • 创建一个Students对象s1s1 = Students('31700001','zjuzhang')

  • 创建一个字符串对象ss = 'adghdkjas'

    对象和实例经常可以互换的

    类:字符串,列表,字典,整形......

    对象:s1,s2


面向对象三个特点

类的封装

类的封装:把有些变量数据封装起来,使通过方法来访问,不允许对象访问,将数据和数据的操作组合起来,类是一个不可分割的独立单位

python中类的成员包括变量(数据,属性)和方法(函数)

类和对象的变量
  • 类的变量:是一个类的全局变量,可以给该类的所有对象(实例)使用,当某个对象对类的变量做了改动时,这个改动会反映到所有实例上

    类变量:是在类中所有方法之外进行定义的,如:price = 1000

  • 对象的变量:不同的变量调用该变量,其值改变后互不影响,是类的每个对象/实例拥有的

    实例变量:一般是指在构造方法__init__()中定义的,定义和使用时需要以self作为前缀,如self.color = red

类的方法

类的方法:在类的内部可以使用def关键字定义一个方法,类的方法必须包含参数self,且作为第一个参数

构造方法__init__()

__init__方法:一个类只能有一个__init__方法,用于初始化类及其变量

私有方法是在类的内部使用的,两个下划线开头,不能在类的外部调用,只能在内部调用

私有成员与公有成员:

  • _xxx:受保护成员,不能用form module import *导入
  • __xxx__:系统定义的特殊成员
  • __xxx:私有成员,只有类内自己能访问,不能使用对象直接访问到这个成员

其他形式名称的成员,都是公有成员,公有成员在类体内和类体外都可以直接访问

类的继承

类的继承:从一个通用类(父类),扩展更多特定的类(子类)

私有成员不能继承

python
 # 父类
class Car():   
    price = 300000   # 定义类变量 
    def __init__(self, name):
        self.name = name    # 定义实例变量
        self.color = ""
        
    def setColor(self, color):  # 定义方法
        self.color = color
 
class ECar(Car):    # 子类ECar继承父类Car
    def __init__(self, name):
        super().__int__(name)   # 初始化父类的属性,使用父类的构造方法
        self.battery_size = 300

类的多态

类的多态:子类的对象可以传递给需要父类类型的参数


类和对象的创建和使用

python使用class关键字来定义类,class关键字之后一个空格,然后是类的名字,再然后是一个冒号,最后换行并定义类的内部实现

python
class Classname:
    initializer   # 初始化
    methjods      # 定义方法
  • isinstance():测试一个对象是否为某个类的实例
  • isinstance(s1, Student):判断对象s1是不是Student类的实例

访问对象:

通过对象名.成员名的形式访问对象的数据成员或方法成员,如s1.name

python
class Fruit:
    price=0
    def __init__(self):
        self.color = 'Red'     # 定义和设置私有属性color
        self.city = 'Kunming'	 # 定义和设置私有属性city
        
    @ staticmethod
    def getPrice():		    # 定义静态方法getPrice
         return Fruit.price
        
    @ staticmethod
    def setPrice(p):		# 定义静态方法setPrice
        Fruit.price = p

@ staticmethod标识的方法是静态方法,静态方法属于类,静态方法通过类名调用,静态方法中不能访问实例属性,只能访问属于类属性

变量值的修改:

  1. 直接通过对象进行修改:

    python
    s4 = Student("lei", "15415616")
    s4.gpa = 3.8  # 直接通过对象进行修改
  2. 通过方法进行设置(常用)

    python
    def setGpa(self, gpa):
       self.gpa = gpa
    s5.setGpa(3.6)

定义makeStudent方法,用于创建对象

python
def makeStudent(infoStr):
   name,num,credits,qpoints = infoStr.split("\t")
   return StudentGPA(name,num,credits,qpoints)

Released under the MIT License.