python程序设计——面向对象程序设计:类
理解面向对象
基本原则是,计算机程序由多个能够起到子程序作用的单元或对象组合而成
关键性观念是,数据以及对数据的操作封装在一起,组成一个相互依存、不可分割的整体,即对象
python面向对象特性
完全支持面向对象的基本功能,如封装、继承、多态以及基类方法的覆盖或重写
python中,对象的概念很广泛,一切内容都可以称为对象
创建类时用变量形式表示的对象属性称为数据成员或成员属性
用函数形式表示的对象行为称为成员函数或成员方法
一、类
1.类的定义与使用
# 定义类
class Car:
def info(self):
print("this is a car")
# 使用类实例化对象
# 通过“对象.方法”访问其中的数据成员或成员方法
car = Car()
car.info()
out:
this is a car
# 使用 isinstance测试某个对象是否为某个类的实例
isinstance(car,Car)
out:
True
# 关键字 pass,类似于空语句
# 占位,预留函数空间
class Car:
def info(self):
print("this is a car")
def color(self):
pass
2.类成员与实例成员
实例属性,一般指在构造函数__init__ 中定义的,定义和使用时必须以self做为前缀
类属性,在类中所有方法之外定义的数据成员
在主程序中(或类的外部),实例属性属于实例(对象),只能通过对象名访问,
而类属性属于类,可以通过类名或对象名访问
--------------------------------------------------------------------
在Python中,可以动态地为类和成员增加成员,体现了python的动态类型
--------------------------------------------------------------------
class Car:
price = 10000 # 定义类属性
def __init__(self,c): # 构造函数
self.color=c # 定义实例属性
car1 = Car("red")
car2 = Car("blue")
print(car1.color,Car.price)
Car.price = 11100 # 修改类属性
Car.name = 'bird' # 增加类属性
car1.color = "yellow" # 修改实例属性
print(car2.color, Car.price, Car.name)
函数与方法有区别,方法一般指与特点实例绑定的函数
1 # 动态为对象增加成员方法
2 class Demo:
3 pass
4 t=Demo()
5 def test(self,v)
6 self.value = v
7
8 t.test = test # 增加成员方法 test
9 t.test(t,20)
10
11 print(t.value)
12
13 out:
14 20
3. 私有成员与共有成员
python并不提供对私有成员严格的访问保护机制,
在定义类的属性时,如果属性名以两个下划线 __ 开头,表示私有属性
私有属性在类的外部不能直接访问,需要通过调用对象的公有成员方法来访问
公有属性可以公开使用,既可以在类的内部访问,也可以在外部程序中使用
----------------------------------------------------
使用下划线作为变量名和方法名前缀和后缀,表示类的特殊成员
_xxx 保护成员,只有类对象和子类对象才能访问
__xxx__ 系统定义的特殊成员
__xxx 类中的私有成员
# 特殊成员定义与访问
class Fruit:
def __init__(self):
self.__color='red' # 私有成员
self.__type__='rectangle' # 特殊成员
self.price = 1 # 公有成员
apple = Fruit()
print(apple.price) # 对象公有数据成员的值
out:
1
apple.price = 2 # 修改对象公开数据成员的值
print(apple.price)
out:
2
apple.__type__ = 'Triangle' # 修改特殊成员的值
print(apple.__type__)
out:
Triangle