python核心-面向对象-三大特性:封装,继承,多态

news2024/9/23 13:20:20

封装 

 继承

# class Animal:
#     pass
#
# class xxx:
#     pass
#
# class Dog(Animal,xxx):
#     pass
#
#
# d = Dog()
# print(d.__class__)
# print(Dog.__class__)
#
#
# print(Dog.__bases__)
# print(Animal.__bases__)
# # object


# ---------------------继承-资源-----------------------------------------------
#
# class Animal:
#     # 属性 和方法
#     # 设置不同权限的属性和方法,继承当中,进行测试
#     # 在子类当中,能否访问到这些资源
#
#     a = 1
#     _b = 2
#     __c = 3
#     def t1(self):
#         print("t1")
#
#     def _t2(self):
#         print("t2")
#
#     def __t3(self):
#         print("t3")
#
#     def __init__(self):
#         print("init, Animal")
#
# class Person(Animal):
#
#     def test(self):
#         print(id(self.a))
#         print(self.a)
#         print(self._b)
#         # print(self.__c)
#
#         self.t1()
#         self._t2()
#         # self.__t3()
#
# p = Person()
# p.test()
#
# print(id(Animal.a))
# p.test()



class B:
    age = 10

class A(B):
    pass

print(A.age)
A.age = 9
print(B.age)

print(A.age)

print(A.__dict__)
print(B.__dict__)

 

 

 

 


# class C:
#     age = "c"
#
# class B(C):
#     age = "b"
#
# class A(B):
#     age = "a"

# A -> B -> C

# class E:
#     age = "e"
#
# class D:
#     age = "d"
#
# class C(E):
#     age = "c"
#
# class B(D):
#     age = "b"
#
# class A(B, C):
#     age = "a"
#
# print(A.age)

# A -> B -> D -> C -> E



class D:
    age = "d"

class C(D):
    age = "c"

class B(D):
    age = "b"

class A(B, C):
    age = "a"

print(A.age)
print (inspect.getmro(A))

 

# ---------------------继承-资源的访问顺序c3-----------------------------



# C3算法
# 	真正步骤
# 		两个公式
# 			L(object) = [object]
# 			L(子类(父类1, 父类2)) = [子类] + merge(L(父类1), L(父类2) , [父类1, 父类2])
# 		注意
# 			+ 代表合并列表
# 			merge算法
# 				1. 第一个列表的第一个元素
# 					是后续列表的第一个元素
# 					或者
# 					后续列表中没有再次出现
# 				2. 如果不符合,则跳过此元素,查找下一个列表的第一个元素,重复1的判断规则
# 				3. 如果最终无法把所有元素归并到解析列表, 则报错
# 	类似拓扑排序, 但并不是! 切记
# 		具体算法步骤
# 			选择一个入度为0的顶点并输出之;
# 			从网中删除此顶点及所有出边。


class D:
    pass
# L(D(object)) = [D] + merge(L(object), [object])
#              = [D] + merge([object],[object])
#              = [D, object] + merge([], [])
#              = [D, object]
class B(D):
    pass
# L(B(D)) = [B] + merge(L(D), [D])
#              = [B] + merge([D, object],[D])
#              = [B, D] + merge([object], [])
#              = [B, D, object] + merge([], [])
#              = [B, D, object]

class C(D):
    pass

class A(B, C):
    pass

# L(A) = [A] + merge(L(B), L(C),[B, C])
# L(A) = [A] + merge([B, D, object], [C, D, object],[B, C])
# L(A) = [A, B] + merge([D, object], [C, D, object], [C])
# L(A) = [A, B, C] + merge([D, object], [D,object])
# L(A) = [A, B, C, D] + merge([object], [object])
# L(A) = [A, B, C, D, object] + merge([], [])
# L(A) = [A, B, C, D, object]

import inspect
print(inspect.getmro(A))
# ---------------------继承-资源的访问顺序c3-算法识别问题-----------------------------

class D():
    pass


class B(D):
    pass


class C(B):
    pass


class A(B, C):
    pass


import inspect

print(inspect.getmro(A))
##错的

# -------------------------继承-资源的覆盖----------------------------

class D():
    age = "d"

class C(D):
    age = "c"
    def test(self):
        print("C")

class B(D):
    age = "b"
    def test(self):
        print("B")

class A(B, C):
    # age = "a"
    pass

print(A.age)
print(A().test())

print(A.mro())
import inspect

print(inspect.getmro(A))

 

 

# # ------------------------------------继承-资源的累加------------------------------------
#
# class B:
#     a = 1
#     def __init__(self):
#         self.b = 2
#
#     def t1(self):
#         print("t1")
#
#     @classmethod
#     def t2(self):
#         print("t2")
#
#     @staticmethod
#     def t3():
#         print("t3")
#
# class A(B):
#     c = 1
#     def __init__(self):
#         self.e = 5
#     def tt1(self):
#         print("t1")
#
#     @classmethod
#     def tt2(self):
#         print("t2")
#
#     @staticmethod
#     def tt3():
#         print("t3")
#
#     pass
#
# a_obj = A()
# print(A.a)
# print(a_obj.b)
# a_obj.t1()
# A.t2()
# A.t3()
#
# print(A.c)
# a_obj.tt1()
# A.tt2()
# A.tt3()


# ------------------------------------继承-资源的累加2------------------------------------

class B:
    a = 1
    def __init__(self):
        self.b = 2

    def t1(self):
        print("t1")

    @classmethod
    def t2(self):
        print("t2")

    @staticmethod
    def t3():
        print("t3")

class A(B):
    c = 1
    def __init__(self):
        B.__init__(self)
        self.e = 5
    def tt1(self):
        print("t1")

    @classmethod
    def tt2(self):
        print("t2")

    @staticmethod
    def tt3():
        print("t3")

    pass

a_obj = A()
print(A.a)
print(a_obj.b)
a_obj.t1()
A.t2()
A.t3()

print(A.c)
a_obj.tt1()
A.tt2()
A.tt3()
class D:
    def __init__(self):
        print("d")

class B(D):
    def __init__(self):
        D.__init__(self)
        print("b")

class C(D):
    def __init__(self):
        D.__init__(self)
        print("c")

class A(B, C):
    def __init__(self):
        D.__init__(self)
        C.__init__(self)
        print("a")

# B()
# C()
A()

 

 

class Animal():
    def jiao(self):
        pass

class Dog(Animal):
    def jiao(self):
        print("汪汪汪")

class Cat(Animal):
    def jiao(self):
        print("喵喵喵")

def test(obj):
    obj.jiao()

d = Dog()
c = Cat()
test(c)

 

import  abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def jiao(self):
        pass

class Dog(Animal):
    def jiao(self):
        print("汪汪汪")

class Cat(Animal):
    def jiao(self):
        print("喵喵喵")

def test(obj):
    obj.jiao()

# d = Dog()
# c = Cat()
# test(c)

d = Dog()
d.jiao()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/801512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最小环计数

Problem - 7322 思路&#xff1a;跑一个floyd&#xff0c;同时求出最小环以及进行最小环计数&#xff0c;对于每个环&#xff0c;我们每次用编号最大的点进行统计&#xff0c;防止重复 以下是模板 for(int k1;k<n;k) {for(int i1;i<n;i) {for(int j1;j<n;j) {if(dis…

java快速生成数据库表文档(HTML、DOC、MD)

在企业级开发中、我们经常会有编写数据库表结构文档的时间付出&#xff0c;关于数据库表结构文档状态&#xff1a;要么没有、要么有、但都是手写、后期运维开发&#xff0c;需要手动进行维护到文档中&#xff0c;很是繁琐&#xff0c;这里推荐一个开源项目&#xff1a;screw gi…

读数据压缩入门笔记09_多媒体数据压缩

1. 压缩分类 1.1. 多媒体数据压缩&#xff08;media-specific compression&#xff09; 1.2. 通用压缩&#xff08;general purpose compression&#xff09; 2. 有损压缩算法 2.1. 为了使数据压缩得更小&#xff0c;可以牺牲多媒体的质量这样的数据转换 2.2. 针对特定的多…

Kaggle灾难推文的自然语言处理-最佳得分详解

目录 灾难推文的自然语言处理——预测哪些推文是关于真实灾难的&#xff0c;哪些不是。 一、比赛概述 二、数据集 三、代码 0.导入库与数据 1. 关键字和位置 1.1 缺失值 1.2 元素和目标分布 2. 元特征 3. 目标和N-grams 3.1 目标 3.2 unigrams 一元语法 3.3 big…

[回馈]ASP.NET Core MVC开发实战之商城系统(三)

经过一段时间的准备&#xff0c;新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始&#xff0c;在之前的文章中&#xff0c;讲解了商城系统的整体功能设计&#xff0c;页面布局设计&#xff0c;环境搭建&#xff0c;系统配置&#xff0c;及首页【商品类型&#xff0c;ba…

如何使用ArcGIS Pro制作越来越真实的水域效果

制图的目的就是为了让图更加的美观&#xff0c;这里我们以水域效果为例&#xff0c;为大家讲解一下如何一步步制作越来越真实的水域效果&#xff0c;希望能对你有所帮助。 常规效果 使用过ArcMap制图的朋友应该比较熟悉&#xff0c;可以在符号系统内修改一下填充颜色&#xff…

启用、禁用员工账号

接口相关信息 controller层 /** 启用禁用员工账号* */PostMapping("/status/{status}")ApiOperation("启用禁用员工账号")public Result startOrStop(PathVariable Integer status, Long id) {log.info("启用禁用员工{}&#xff0c;{}",status,i…

Bert模型及变体

ALBert ALBERT就是为了解决模型参数量大以及训练时间过长的问题。ALBERT最小的参数只有十几M, 效果要比BERT低1-2个点&#xff0c;最大的xxlarge也就200多M。可以看到在模型参数量上减少的还是非常明显的&#xff0c;但是在速度上似乎没有那么明显。最大的问题就是这种方式其实…

Kubernetes 之CNI 网络插件对比

介绍 网络架构是Kubernetes中较为复杂、让很多用户头疼的方面之一。Kubernetes网络模型本身对某些特定的网络功能有一定要求&#xff0c;但在实现方面也具有一定的灵活性。因此&#xff0c;业界已有不少不同的网络方案&#xff0c;来满足特定的环境和要求。 CNI意为容器网络接…

Java是什么?为什么众多编程语言要学习Java?Java有哪些特点?

Java 是近 十几 年来计算机软件发展过程中的传奇&#xff0c;其在众多开发者心中的地位可谓“爱不释手”&#xff0c;与其他一些计算机语言随着时间的流逝影响也逐渐减弱不同&#xff0c;Java 随着时间的推移却依然坚挺。 从首次发布开始&#xff0c;Java 就跃到了 Internet 编…

「开源项目」强大易用的开源建站工具-halo

建站工具halo 基本介绍 Halo 作为一款好用又强大的开源建站工具&#xff0c;配合上不同的模板与插件&#xff0c;可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站&#xff0c;可以是你的个人博客&#xff0c;也可以是团队共享的知识库&#xff0c;甚至可以是一…

通过Filebeat进行日志监控

对系统的日志监控&#xff0c;通用做法是使用ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;进行监控和搜索日志&#xff0c;这里给出另一种方案&#xff1a;通过Filebeat接收日志到Kafka&#xff0c;监控平台接收Kafka&#xff0c;并通过WebSocket实时展示。 这…

Java枚举类的构造函数

Java枚举类可以定义构造函数 Java枚举类可以定义构造函数&#xff0c;枚举常量后面括号中的参数值就是传递给构造函数的参数。 代码示例&#xff1a; package com.thb;public enum Constant {// 枚举常量后面括号中的参数值就是传递给构造函数的参数值REGISTER((byte)0x01),…

windows版docker部署springcloud项目

材料&#xff1a; 1.windows版docker环境&#xff08;其他版教程可能道理一样但是比如文件后坠名上可能有差异&#xff09; 2.运行好的数据库容器&#xff08;实现教程&#xff09; 3.所有jar包 实现&#xff1a; 最后整好的文件夹结构图&#xff08;原工程文件机密&#xf…

教你一文教你使用自己的域名远程访问内网群晖NAS+6.X【内网穿透】

文章目录 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 在之前的文章中&#xff0c;我们向大家演示了如何使用cpolar&#xff0c;创建一条固定的、能够在公共互联网登录内网群晖NAS的数据隧道。这条隧道已经能够应对…

医学案例|ROC曲线之面积对比

一、案例介绍 为评价CT和CT增强对肝癌的诊断效果&#xff0c;共检查了32例患者&#xff0c;每例患者分别用两种方法检查&#xff0c;由医生盲态按4个等级诊断&#xff0c;最后经手术病理检查确诊其中有16例患有肝癌&#xff0c;评价CT个CT增强对肝癌是有有诊断效果并且试着比较…

cpolar内网穿透工具

文章目录 cpolar内网穿透工具 cpolar内网穿透工具 科学技术的发展日新月异&#xff0c;电子设备在人们的生活中已成为不可或缺的工具&#xff0c;甚至在很多情况下&#xff0c;各类型的电子设备已经成为工作的核心&#xff0c;虽然移动设备越来越小巧&#xff0c;功能也越来越…

Lab1 datalab

修改bits.c&#xff0c;使其满足btest的测试&#xff0c;代码规范./dlc bits.c 测试 make cleanmake btest./btest bitXor 思路 题目的意思是用按位&和取反~实现异或^操作。即x和y的同一位置如果都是1或者都是0&#xff0c;那么异或之后是0&#xff0c;否则是1 x & …

C#学习系列之System.Windows.Data Error: 40报错

C#学习系列之System.Windows.Data Error: 40报错 前言报错内容解决总结 前言 在用户界面使用上&#xff0c;代码运行没有问题&#xff0c;但是后台报错&#xff0c;仔细研究了报错内容&#xff0c;解决问题&#xff0c;所以记录一下。 报错内容 System.Windows.Data Error: 4…

【小波尺度谱】从分段离散小波变换计算小波尺度谱研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…