面对对象概念
1.封装,继承,多态
2.对象的定义
*某种事物的抽象(功能)
*抽象原则包括数据抽象和过程抽象
*数据抽象:定义对象属性;过程抽象:定义对象操作
3.封装
把客观事物封装成对象
4.继承
允许使用现有类的功能,并在无需重新改写原来的类的情况下,对这些功能进行扩展
5.多态性
对象可以表示多个类型的能力
类中定义的成员变量
实例属性
*通过self.变量名定义 (和java里面的this一样)
每个对象都可定义自身的属性,且互不影响
__del__方法(析构函数)
默认情况下python可以自动回收垃圾,但是不确定是在那个时候回收的
用del可以销毁一个对象是实例
p1 = person()
del p1 //销毁p1
python中的私有方法和共有方法
1.两个下划线开头,但不以两个下划线结束的方法是私有的(private),其他为公共的(public)
2.以双下划线开始和结束的方法是Python的专有特殊方法。不能直接访问私有方法,但可以在其他方法中访问
def __founction(self): 私有方法
方法重载
对象可以多次调用同一个方法 , 但是传的参数和数量,类型不同
继承
1.派生类:Python支持多重继承,即一个派生类可以继承多个基类
2.声明派生类时,必须在其构造函数中调用基类的构造函数
重写
把基类里面的方法在派生类里面重写一遍
import random
import math
class Stat:
def __init__(self, n):
self._data = []
for i in range(n):
self._data.append(0)
def addDataPoint(self, i):
"""增加数据点"""
self._data[i] += 1
def count(self):
"""计算数据点个数之和(统计数据点个数)"""
return sum(self._data)
def mean(self):
"""计算各数据点个数的平均值"""
return sum(self._data) / len(self._data)
def max(self):
"""计算各数据点个数的最大值"""
return max(self._data)
def min(self):
"""计算各数据点个数的最小值"""
return min(self._data)
def draw(self):
"""绘制简易直方图"""
for i in self._data:
print('#' * i)
# 测试代码
if __name__ == '__main__':
# 随机生成100个的0到9的数
st = Stat(10)
for i in range(100):
score = random.randrange(0, 10)
st.addDataPoint(math.floor(score))
print('数据点个数:{}'.format(st.count()))
print('数据点个数的平均值:{}'.format(st.mean()))
print('数据点个数的最大值:{}'.format(st.max()))
print('数据点个数的最小值:{}'.format(st.min()))
st.draw() # 绘制简易直方图
静态方法与类方法
静态方法是类中的函数 , 不需要实例就可调用,在静态方法里面不能调用类的属性和方法 , 和类没有交互,主要用来写一些逻辑性代码
类方法是将类本身作为对象, 直接用类名就可调用
class ClassTest(object):
__num = 0
@classmethod
def addNum(self):
self.__num += 1
@classmethod
def getNum(self):
return self.__num
def __new__(self):
ClassTest.addNum()
return super(ClassTest,self).__new__(self)
class Student(ClassTest):
def __init__(self):
self.name = ''
a = Student()
b = Student()
print(ClassTest.getNum())
以上两个方法,结果一样