python是一种支持面向对象编程的编程语言,在面向对象编程的过程中,我们使用类、对象、继承和多态等概念构建程序。
类和对象
在python中,我们使用class关键字定义一个类,类包含成员变量和成员函数,成员变量用属性表示,成员函数用方法表示。
class Person:
# 成员变量
name = ''
age = 0
# 成员函数
def display(self):
print('My name is %s, I am %d years old.' % (self.name, self.age))
上面的代码定义了一个Person类,该类包含了两个成员变量name和age,和一个成员函数display。
我们可以使用类定义一个对象,对象拥有类的属性和方法,在对象中我们可以修改属性的值,也可以调用方法。
p1 = Person()
p1.name = 'Tom'
p1.age = 18
p1.display()
上面的代码创建了一个对象p1,通过直接访问对象的属性来修改属性的值,并调用对象的方法display。程序输出结果如下:
My name is Tom, I am 18 years old.
构造函数和析构函数
构造函数和析构函数是一种特殊的函数,当对象创建和销毁时,系统会自动调用它们。
构造函数通常用于初始化成员变量,如下代码:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def display(self):
print('My name is %s, I am %d years old.' % (self.name, self.age))
p1 = Person('Tom', 18)
p1.display()
上面的代码定义了一个构造函数__init__
,该函数在对象创建时被调用,并用参数初始化对象的属性值。程序输出结果如下:
My name is Tom, I am 18 years old.
析构函数通常用于对象销毁时的清理工作,如下代码:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __del__(self):
print('Person will be destroyed.')
def display(self):
print('My name is %s, I am %d years old.' % (self.name, self.age))
p1 = Person('Tom', 18)
p1.display()
del p1
上面的代码定义了一个析构函数__del__
,该函数在对象销毁时被调用,并打印一条删除对象的消息。程序输出结果如下:
My name is Tom, I am 18 years old.
Person will be destroyed.
继承
继承是一种机制,通过它子类可以继承父类的成员变量和成员函数,并且可以在子类中添加新的成员变量和成员函数。
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print('I can eat!')
class Dog(Animal):
def bark(self):
print('I can bark!')
d1 = Dog('a dog')
d1.eat()
d1.bark()
上面的代码定义了一个Animal类和一个继承自Animal类的Dog类,这里的Dog是Animal的子类,继承了Animal的成员变量和成员函数,并在Dog类中添加了一个新的成员函数。
创建Dog类的对象后,我们可以调用父类的函数并使用自己的函数,程序输出结果如下:
I can eat!
I can bark!
多态
多态是一种机制,它允许我们用一个父类对象的引用,调用子类对象的方法。
class Shape:
def __init__(self):
pass
def draw(self):
pass
class Rectangle(Shape):
def draw(self):
print('Draw a rectangle.')
class Circle(Shape):
def draw(self):
print('Draw a circle.')
def drawshape(obj):
obj.draw()
s1 = Shape()
r1 = Rectangle()
c1 = Circle()
drawshape(s1) # 什么都不会输出
drawshape(r1) # 输出 Draw a rectangle.
drawshape(c1) # 输出 Draw a circle.
上面的代码定义了一个Shape基类和两个继承自Shape类的子类Rectangle和Circle,它们分别重写了父类的draw方法。
然后定义了一个函数drawshape来调用对象的draw方法,这里我们可以传递Shape、Rectangle和Circle的对象给drawshape函数,并且程序会调用相应的重写方法。
程序输出结果如下:
Draw a rectangle.
Draw a circle.
这就是python面向对象函数的完整攻略,希望对你有所帮助。