首页 > 编程语言 >python学习笔记-10

python学习笔记-10

时间:2024-06-22 19:30:40浏览次数:28  
标签:__ 10 name python self 笔记 pass print age

面向对象编程-下

1.私有化属性

语法:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。

使用私有化属性的场景:
1.把特定的一个属性隐藏起来,不让类的外部进行直接调用。
2.不让属性的值随意改变。
3.不让子类继承。
class Person():
    def __init__(self):
        self.name='里斯'
        self.age=30
        pass
    pass
xl=Person()
print(xl.name)
#私有化
class Pri():
    def __init__(self):
        self.__name='李四'  #如此外界就访问不到了,但是在内部可以访问到
        self.age=12
        pass
    def __str__(self):
        return '{}的年龄是{}'.format(self.__name,self.age)
    pass
ll=Pri()
print(ll)
print(ll.__name)

在这里插入图片描述

#私有化
class Pri():
    def __init__(self):
        self.__name='李四'  #如此外界就访问不到了,但是在内部可以访问到
        self.age=12
        pass
    def __str__(self):
        return '{}的年龄是{}'.format(self.__name,self.age)
    pass
class Student(Pri):
    def pri(self):
        print(self.__name)  ##同样的,子类也访问不到私有属性
        pass
    pass
stu=Student()
stu.pri()

在这里插入图片描述
小结:
1.私有化的实例属性和类属性不能在外部直接访问,可以在类的内部随意访问。
2.子类不能继承父类的私有化属性,只能继承父类中公开的属性和行为。
3.如果想将属性私有化,直接在属性名的前面加两个下划线’__'就可以了。
4.私有化属性的值可以在类内部修改。

2.私有化方法

私有化方法即在方法名前面加两个下划线。

class Animal:
    def eat(self):
        print('吃')
        pass
    def run(self):
        print('跑')
        pass
    pass
class Bird(Animal):
    pass
b1=Bird()
b1.eat()
b1.run()
#私有化方法
class Pr():
    def __eat(self):
        print('私有化的吃')
        pass
    def run(self):
        self.__eat()
        print('跑')
        pass
    pass
b2=Pr()
b2.run()
b2.__eat()

在这里插入图片描述

私有化方法一般是类内部调用,子类不能继承,外部不能调用

前面一个单下划线:标识protected类型即保护类型的变量,只能允许其本身与子类进行访问,不能使用from ... import *的方式导入
前后两个双下划线:魔法方法
后面单下划线:避免属性名与python关键字冲突
前面双下划线:私有化,private
#访问私有变量的话一般写两个方法,一个访问一个修改,由方法去控制访问
class Person:
    def __init__(self):
        self.__age=19
        pass
    def get_age(self):   #访问
        return self.__age
    def set_age(self,age):     #修改
        if age<0:  
            print('年龄不能小于0')
            pass
        else:
            self.__age=age
            pass
        pass
    pass
p=Person()
p.set_age(12)
print(p.get_age())
p2=Person()
p.set_age(-1)

在这里插入图片描述

3.属性函数property

若想直接像访问公共属性一样访问私有属性而不是如同上述使用方法访问私有属性,可以使用属性函数。
法一:

#访问私有变量的话一般写两个方法,一个访问一个修改,由方法去控制访问
class Person:
    def __init__(self):
        self.__age=19
        pass
    def get_age(self):
        return self.__age
    def set_age(self,age):
        if age<0:
            print('年龄不能小于0')
            pass
        else:
            self.__age=age
            pass
        pass
    #定义一个类属性,实现通过直接访问属性的形式去访问私有的属性
    age=property(get_age,set_age)
    pass
p=Person()
print(p.age)
p.age=25
print(p.age)

在这里插入图片描述
法二:使用装饰器

#访问私有变量的话一般写两个方法,一个访问一个修改,由方法去控制访问
class Person:
    def __init__(self):
        self.__age=12
    @property   #用装饰器添加属性标识,提供一个getter方法
    def age(self):
        return self.__age
    @age.setter   #提供一个setter方法
    def age(self,parms):   #修改私有属性的值,parms也就是后传入想要修改成的age
        if parms<0:
            print('年龄不能小于0')
            pass
        else:
            self.__age=parms
            pass
        pass
    pass
p1=Person()
print(p1.age)
p1.age=20
print(p1.age)

在这里插入图片描述

4.__new__方法

在这里插入图片描述

5.单例模式

单例模式是常用软件设计模式的一种,目的是确保某一个类中只有一个实例存在。如果希望在某个系统中,某个类只能出现一个实例,整个单例模式就能满足要求。

#创建一个单例对象 基于__new__实现
class DataBaseClass(object):
    def __new__(cls, *args, **kwargs):
        #cls._instance=cls.__new__(cls)   不能使用自己的new方法,容易造成递归死循环,应该调用父类的new方法
        if not hasattr(cls,'_instance'):  #如果不存在就创建
            cls._instance=super().__new__(cls,*args,**kwargs)
        return cls._instance
    pass
db1=DataBaseClass()
print(id(db1))
db2=DataBaseClass()
print(id(db2))   #可以看出来都是一个对象
class DBoptSingle(DataBaseClass):
    pass
d1=DBoptSingle()
print(id(d1))
d2=DBoptSingle()
print(id(d2))   #子类继承后也都是一个

在这里插入图片描述

6.错误与异常处理

有时候代码写错了执行程序的时候,执行到错误代码程序会直接种植报错,这是因为python检测到一个错误时,解释器就无法继续执行了,出现了错误的提示,这就是“异常”。

#语法格式:
try:
	可能出现错误的代码块
except:
	出错之后执行的代码块
else:
	没有出错的代码块
finally:
	不管有没有出错都执行的代码块

将可能出错的代码放到try里面,except可以指定类型捕获异常。except里面的代码是捕获到异常时执行。
#异常处理
try:
    print(b)  #要捕获异常的代码
    pass
except NameError as msg:   #将异常信息输出
    #处理异常,捕获到异常就来这里
    print(msg)
    pass
print('处理好了Name异常')

在这里插入图片描述
如果不是一个类型的异常是不会捕获的

#异常处理
try:
    li=[1,2,3,3]  #要捕获异常的代码
    print(li[10])
    pass
except NameError as msg:
    #处理错误,捕获到错误就来这里
    print(msg)
    pass   
print('处理好了Name异常')

在这里插入图片描述
因为是index异常而不是name异常,所以try-except语句没起到捕获异常的作用。

#异常处理
try:
    li=[1,2,3,3]  #要捕获异常的代码
    print(li[10])
    pass
except NameError as msg:
    #处理错误,捕获到错误就来这里
    print(msg)
    pass
except IndexError as msg:
    print(msg)
    pass
print('处理好了异常')

在这里插入图片描述
这样就捕获到了。

在这里插入图片描述
python中内置的异常类型

标签:__,10,name,python,self,笔记,pass,print,age
From: https://blog.csdn.net/weixin_46081986/article/details/139575907

相关文章

  • 【学习笔记】使用第三方工具(secureCRT软件)通过console口本地访问访问交换机的详细操作
    一、前期准备1.终端设备(个人电脑)已正确安装,并能成功运行secureCRT软件(本次实验软件为:secureCRT)2.通过console口本地访问则需要准备一根console线(本次实验软console线为:USB转RJ45console调试线)二、操作步骤1、简明步骤说明:简明步骤需要一定基础1.1console线的USB端......
  • 【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
    一、介绍球类识别系统,本系统使用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集'美式足球','棒球','篮球','台球','保龄球','板球','足球','高尔夫球','曲棍球','冰球','橄榄球',&#......
  • P1072 [NOIP2009 提高组] Hankson 的趣味题【GCD】
    [NOIP2009提高组]Hankson的趣味题题目描述Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson。现在,刚刚放学回家的Hankson正在思考一个有趣的问题。今天在课堂上,老师讲解了如何求两个正整数......
  • 【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
    一、介绍球类识别系统,本系统使用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集‘美式足球’,‘棒球’,‘篮球’,‘台球’,‘保龄球’,‘板球’,‘足球’,‘高尔夫球’,‘曲棍球’,‘冰球’,‘橄榄球’,‘羽毛球’,‘乒乓球......
  • 学习Ange记录--06~10
    06.changesymbolicinheap再来复习一下流程1.建立项目p=angr.Project(path)2.设置入口state=p.factory.blank_state(0xffffffff)3.设置符号对象pw=claripy.BVS('pw',64)4.这次是把符号放到堆上,于是可以自己创个新的堆就好了(1).给新的堆一个地址(2).给新的指向堆的指针一......
  • python 快速排序
     快速排序快速排序是一种非常高效的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 以下是一个使用Python实现的快速排序的示例代码: pythond......
  • AI生成Python之语句练习题
    对应文章:Python学习记录#2、语句涉及:条件语句(if-elif-else)、循环语句(while、for)。目录练习题1.猜数字游戏2. 斐波那契数列(难)3. 九九乘法表4.列表过滤5. 字符串反转练习题1.猜数字游戏        编写一个程序,让计算机随机选择一个1到100之间的整数,......
  • 算法课程笔记——蓝桥云课第23次云课
    算法课程笔记——蓝桥云课第23次云课......
  • 算法课程笔记——Kruskal & Prim
    算法课程笔记——Kruskal&Prim......
  • DMA学习笔记(天空星stmf4开发板)
    目录    #DMA介绍#相关数据传输方法介绍#DMA相关数据手册框图介绍#DMA相关涉及概念介绍  #软件实现DMA传输数据    #DMA介绍#相关数据传输方法介绍    DirectMemoryAccess 即DMA ,芯片开发板,片上外设的一种,相关作用:进行传输数据不......