面向对象编程,是一种编程方式,这种编程方式需要使用“对象”来实现。万物都是对象。
对象的特征:
1.世间万物皆对象
2.每个对象都是唯一的
3.对象具有属性和行为(对象的行为包括具有的功能以及具体的实现)
4.对象具有状态
5.对象分为类对象和实例对象两大类(类对象是具有相同属性和实例对象的抽象,类对象是实例对象的模板,实例对象是由类对象创造出来的)
面向对象编程的大体步骤
1.抽象出类对象
2.抽象出类对象的属性
3.抽象出类对象的行为
4.根据类对象创建实例对象
5.通过实例对象访问属性和方法
class Cat(object):
pass
class 类名(object):
#类名由一个或多个单词组成,单词首字母大写
初识类的方法
#行为(方法)是类中特殊的函数
#初识属性
class Cat(object):
def _init_(self, breed, name, age, health):
self.breed = breed
self.name = name
self.age = age
self.health = health
def run(self):
print("Cat is running")
def miao(self):
print("Cat is miaoing")
def eat(self):
print("Cat is eatting")
#根据类对象创建实例对象
cat = Cat("波斯猫","喵喵",1,"卢本伟")
print(cat.breed)
print(cat.name)
print(cat.age)
print(cat.health)
cat.run()
cat.miao()
cat.eat()
**实例属性:**实例对象所绑定的属性
绑定方法有两种:
1.在类对象内部:
self.属性名 = 属性值
2.在对象外部:
实例对象.属性名 = 属性值
class MyClass(object):
def _init_(self):
#在类对象的内部绑定实例属性
self.ia1 = 18
def do_sth1(self):
#在类对象的内部访问实例属性
print(self.ia1)
def do_sth2(self):
print(self.ia2)
def do_another(self):
#在类对象的内部绑定实例属性
self.ia2 = 56
def do_sth3(self):
print(self.ia3)
def do_sth3(self):
print(self.ia3)
实例对象.dict
可获得该实例对象所绑定的所有属性及其值得字典
**类属性:**指类对象所绑定的属性
绑定类属性的方式有两种:
1.在类对象内部(方法外):
属性名 = 属性值
2.在类对象外部
类对象.属性名 = 属性值
class MyClass(object):
#在类对象内部(方法外)绑定类属性
cal = 66
def do_sth(self):
#在类对象内部(方法中)访问类属性
print(MyClass.cal)
类的专有方法:
init : 构造函数,在生成对象时调用
del : 析构函数,释放对象时使用
repr : 打印,转换
setitem : 按照索引赋值
getitem: 按照索引获取值
len: 获得长度
cmp: 比较运算
call: 函数调用
add: 加运算
sub: 减运算
mul: 乘运算
truediv: 除运算
mod: 求余运算
pow: 乘方
面向对象常用术语
抽象/实现
抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于 绘程序结构,从而实现这种模型。抽象不仅包括这种模型的数据属性,还定义了这些数据的接口。
封装/接口
封装描述了对数据/信息进行隐藏的观念,它对数据属性提供接口和访问函数。通过任何客户端直接对数据的访问,无视接口,与封装性都是背道而驰的,除非程序员允许这些操作。(注意:对外透明的意思是,外部调用者可以顺利的得到自己想要的任何功能,完全意识不到内部细节的存在)
合成
合成扩充了对类的 述,使得多个不同的类合成为一个大的类,来解决现实问题。合成 述了 一个异常复杂的系统,比如一个类由其它类组成,更小的组件也可能是其它的类,数据属性及行为, 所有这些合在一起,彼此是“有一个”的关系。
派生/继承/继承结构
派生描述了子类衍生出新的特性,新类保留已存类类型中所有需要的数据和行为,但允许修改或者其它的自定义操作,都不会修改原类的定义。
泛化/特化
泛化表示所有子类与其父类及祖先类有一样的特点。
特化描述所有子类的自定义,也就是,什么属性让它与其祖先类不同。
多态与多态性
多态指的是同一种事物的多种状态:水这种事物有多种不同的状态:冰,水蒸气。多态性的概念指出了对象如何通过他们共同的属性和动作来操作及访问,而不需考虑他们具体的类。
自省/反射
自省也称作反射,这个性质展示了某对象是如何在运行期取得自身信息的。如果传一个对象给你,你可以查出它有什么能力,这是一项强大的特性。