python类与对象(笔记)

面对对象概念

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()  # 绘制简易直方图

在这里插入图片描述
静态方法与类方法

参考https://www.cnblogs.com/pinking/p/7944376.html

静态方法是类中的函数 , 不需要实例就可调用,在静态方法里面不能调用类的属性和方法 , 和类没有交互,主要用来写一些逻辑性代码

在这里插入图片描述类方法是将类本身作为对象, 直接用类名就可调用

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())  

在这里插入图片描述以上两个方法,结果一样

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值