面向对象编程概述
对象具有以下特征:
- 万物皆对象
- 每个对象唯一
- 对象具有属性和行为
- 对象具有状态(属性的取值)
- 对象分为类对象和实例对象两大类
面向对象编程的步骤:
- 抽象出类对象
- 抽象出类对象的属性
- 抽象出类对象的方法
- 根基类对象创建实例对象
- 通过实例对象访问属性和方法
Python是动态语言,所以可以对类动态地绑定类方法,在实例对象创建之后,也可以对其动态地绑定实例方法。
# 动态绑定方法
from types import MethodType
class Animal(object):
def __init__(self, name):
self.name = name
def say_name(self):
print(self.name)
dog = Animal('dog')
cat = Animal('cat')
dog.say_name = MethodType(say_name, dog) # 动态绑定实例方法
Animal.say_name = say_name # 动态绑定类方法
dog.say_name()
cat.say_name()
在类对象中定义方法的几种方式。
静态方法使用@staticmethod装饰,只是一个普通的函数,便于管理。
类方法使用@classmethod装饰,需要传入形参cls。
- 实例方法不需要使用装饰器,需要传入形参self。
# 静态方法、类方法、实例方法
class Animal(object):
def __init__(self, name):
self.name = name
@staticmethod
def say_hello():
print('hello')
@classmethod
def say_hi(cls):
print('hi')
cls.say_hello()
def say_name(self):
print(self.name)
self.say_hello()
dog = Animal('dog')
dog.say_hello()
dog.say_hi()
dog.say_name()