面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术 [1] 发展到一定阶段后的产物。
类和对象
类是一些对象的抽象,隐藏了对象内部复杂的结构和实现。类由变量和函数两部分构成,类中的变量称为成员变量,类中的函数称为成员函数。
类和对象的区别:
类是对客观世界中事物的抽象,对象是类实例化后的实体。
类的定义
python中使用class关键字定义一个类,类名的首字符一般要大写。类把需要使用的变量和方法组合在一起,这种方式称为封装。
类继承自Object
# 类的创建
class Fruit:
def __init__(self):
self.name = name
def grow(self):
print("class fruit")
对象的创建
创建对象的过程称为实例化
# 类的创建
class Fruit:
def grow(self):
print("class fruit")
fruit = Fruit() # 对象的创建
fruit.grow() # 对象调用类方法
属性和方法
类是由属性和方法组成。类的属性是对数据的封装,类的方法则表示对象具有的行为。
类的属性:
类的属性一般分为私有和公有。Python中并没有这一类的关键字。默认情况下所有的属性都是“公有的”。如果属性前面以两个下划线开始则表示是私有的。
python中的属性分为实例属性和静态属性。实例属性是以self作为前缀的属性。python中静态变量称为类变量。
class Fruit:
prince = 0 #类属性
def __init__(self):
self.name = "red" #实例属性
zone = "China" #局部变量
python中的类和对象都可以访问类属性。
私有属性的访问:instance._classname__attribute
class Fruit:
def __init__(self):
self.__name = "red" #私有属性
fruit = Fruit() # 对象的创建
print(fruit._Fruit__name) #访问私有属性
类的方法
类的方法分为公有方法和私有方法
python使用函数staticmethod()或@staticmethod修饰器把普通的函数转化为静态的函数,Python中静态函数用类名作为前缀调用。
class Fruit:
price = 0 # 类变量
def __init__(self):
self.__color = "red"
def getColor(self):
print(self.__color)
@ staticmethod
def getPrice():
print(Fruit.price)
def __getPrice():
Fruit.price = Fruit.price + 10
print(Fruit.price)
count = staticmethod(__getPrice)
apple = Fruit()
apple.getColor()
Fruit.count()
Fruit.count()
Fruit.getPrice()
Python中还有一种方法称为类方法。类方法使用函数classmethod()或@classmethod
内部类的使用
用外部类调用内部类,生成内部类的实例,再调用内部类的方法。
class Car:
class Door:
def open(self):
print("open door")
innerClass = Car.Door()
innerClass.open()
内部类容易造成程序结构的复杂,不提倡使用
__init__()方法
构造函数用于初始化类的内部状态,为类的属性设置默认值。
class Color:
def __init__(self, color):
self.__color = color
def getColor(self):
print(self.__color)
def setColor(self, color):
self.__color = color
c = Color("yellow")
c.getColor()
c.setColor("blue")
c.getColor()
__del__方法
析构函数用于释放对象占用的资源。python提供了析构函数__del__()
垃圾回收机制
python采用垃圾回收机制处理对象。python提供gc模块释放不再使用的对象。python采用引数计数的方法。当某个对象在其引用域内引用计数为0时,Python就会自动清除对象。
类的内置方法
__init__()和__del__()都是类的内置方法。
继承
继承是面向对象的重要特性之一。原始的类称为父类或超类,新类称为子类或派生类。继承实现代码的重用。
# 继承
class A:
pass
class B(A):
pass
super()
多态性
python支持多继承
# 继承
class A:
pass
class B:
pass
class C(A,B):
pass