类的进阶知识点下篇

举报
在下周周ovo 发表于 2022/09/20 17:25:01 2022/09/20
【摘要】 类的进阶知识点下篇

目录


🌌1、del的使用

🌄五、动态属性修改知识点

🌌1、小结

📚结语



🌌1、del的使用

因为代码二出现的原因,没有改变类中的language,而是在Python命名空间中创建了一个language = 'Chinese',所以之后python这个实例化的对象就再也拿不到类中的language静态属性了。

但是用del python.language可以解决

class Course:
    language = 'Chinese'
    def __init__(self, teacher, course_name, period, price):
        self.teacher = teacher
        self.name = course_name
        self.period = period
        self.price = price

python = Course('Lisa','python','6 months',20000)
linux = Course('Bob','linux','6 months',20000)
python.language = 'English'
print('Course:',Course.language)
print('python: ',python.language)
print('linux: ',linux.language)
del python.language
print('del 后 python: ',python.language)

输出结果:
Course: Chinese
python:  English
linux:  Chinese
del 后 python:  Chinese


🌄五、动态属性修改知识点

上面的language = 'Chinese',中 'Chinese'是属于字符串是不可变的数据类型,如果换成language = [Chinese]这时列表是可变的数据类型,那么对动态属性修改与对静态属性的修改有什么区别呢?

代码一

class Course:
    language = ['Chinese']
    def __init__(self, teacher, course_name, period, price):
        self.teacher = teacher
        self.name = course_name
        self.period = period
        self.price = price

python = Course('Lisa','python','6 months',20000)
linux = Course('Bob','linux','6 months',20000)
Course.language[0] = 'English'
print('Course:',Course.language)
print('python: ',python.language)
print('linux: ',linux.language)

输出结果:
Course: ['English']
python:  ['English']
linux:  ['English']

代码二

class Course:
    language = ['Chinese']
    def __init__(self, teacher, course_name, period, price):
        self.teacher = teacher
        self.name = course_name
        self.period = period
        self.price = price

python = Course('Lisa','python','6 months',20000)
linux = Course('Bob','linux','6 months',20000)
python.language[0] = 'English'
print('Course:',Course.language)
print('python: ',python.language)
print('linux: ',linux.language)

输出结果:
Course: ['English']
python:  ['English']
linux:  ['English']

结果示意图

编辑


🌌类中的继承

继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类

python中类的继承分为:单继承和多继承


抽象类   接口类
Python中没有接口类,有抽象类,abc模块中的metaclass = ABCMeta ,@abstructmethod
    本质是做代码规范用的,希望在子类中实现父类方法名字完全一样的方法

在Java角度上看,是有区别的
    Java本来就支持单继承 所以就有了抽象类
    Java没有多继承 所以为了接口隔离原则,设计了接口这个概念,支持多继承了

Python既支持多继承也支持单继承,所以对接口类和抽象类的区别就不那么明显
    在Python中没有内置接口类
    多态和鸭子类型
        多态 ———— Python天生支持多态
        鸭子类型  ———— 不依赖父类的情况下实现两个类似类中的同名方法
        
    封装 ———— 私有的
        在Python中只要__名字,就把这个名字私有化了
        私有化了之后 就不能从类的外部直接调用了
        静态属性 方法 对象属性 都可以私有化
        这种私有化只是从代码级别做了变形,并没有真的约束
        变形机制_类名__名字 在类的外面用这个调用,在类的内部直接用__名字调用
 

🌌1、小结

对于可变数据类型来说,对象名的修改是共享language[0] = 'Chinese'的, 重新赋值(language = 'Chinese')是独立的

📚结语

 📙:感谢各位能够看到这里💖💖💖:在鲁迅一篇未发表的文章中说过:“代码看懂了不是懂✨一定要自己实际操作哇✨这样才能更好的理解和吸收。”

最后来一句:一个人可以在任何他怀有无限热忱的事情上成功,让我们一起进步吧✨

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。