Python3中类的高级语法及实战

news2025/1/10 23:25:47



Python3中类的高级语法及实战

Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案



一:  类定义语法 

通过下面的实例,你将会了解到如下的内容体系:

(1)类静态属性

(2)类动态属性

(3)类初始化过程: __init__(self)被执行,相当于java中的构造函数

(4)类变量与实例变量

(5)怎样限制某个类无限添加动态属性

# -*- coding:utf8 -*-
class ClassCreate:
    """A simple example class"""
    # 类的静态属性i
    i = 1234

    @staticmethod
    def functionMethod(self):
        return "I Love You !"


print(
    """
    【面向对象OOP编程是一种编程思想:
    Python中使用关键字class来创建一个类,class之后紧根类名,并与冒号结尾】
    """)

print("调用类的静态方法:", "使用类名.静态方法(类的实例化对象)")

myClass = ClassCreate()
print(ClassCreate.functionMethod(myClass))
print()
print("类的成员变量为所有对象实例共享:[静态属性] ", myClass.i)

print(
    """
    调用类的内置属性: __name__,__doc__,__module__,__base__,__dict__
    """
)
print("打印类的内置属性: ")
print(ClassCreate.__class__)
print(ClassCreate.__name__)
print(ClassCreate.__doc__)
print(ClassCreate.__base__)
print(ClassCreate.__bases__)
dictData = ClassCreate.__dict__
print(dictData)
print()
print(dictData['functionMethod'])

print("""
     类的属性分: 
        (1)定义类时定义的属性叫静态属性
        (2)动态属性是通过:类对象.属性名=属性值的方式动态添加的属性成为动态属性
""")


class Person:
    pass


person = Person()
person.name = "张三"
person.age = 30
print('''
    使用一个空类,处理动态添加属性的问题,在实际引用中,所有的类都具有这种动态添加的属性的特性
''')
print("访问类的动态属性: 用户的名称%s" % person.name, "用户的年龄: %d" % person.age)

print("删除类的动态属性: name: 使用: ", "del person.name")
del person.name

try:
    print("访问类的动态属性: 用户的名称%s" % person.name, "用户的年龄: %d" % person.age)
except AttributeError as err:
    print("访问删除的动态属性name,异常: ", err.__traceback__)

print("""
   为了无上限的给类动态添加属性: 可以使用__slots__属性给类可以动态添加属性的限制,__slots__元组可以限制类中添加的属性:例如定义类的时候
   限制类只能添加动态属性: __slots__ = ('name','age','address')这些属性,如添加这些以外的属性,将会报错
""")

print('例如: 我们定义Record类')


# 定义一个空类,设置合法的属性为
class Record:
    """使用内置属性__slots__声明类的合法动态属性"""
    __slots__ = ('name', 'age')
    address = ''  # 该类包括一个类属性: address


Anna = Record()
Anna.name = '张三'
# 修改类变量address,只能使用:类名.属性名 = 属性值;而不能使用:对象.属性名=属性值的方式
Record.address = '北京市'
Anna.age = 20

print("Anna : ", Record.__dict__)
# 访问类变量确可以使用:对象名.属性名
print("长期居住地址: ", Record.address)

print('''
   当我们动态前景: college属性时,看看发生声明效果
''')
try:
    Anna.college = '清华大学'
    print(Anna.college)
except AttributeError as err:
    print("添加非法的动态属性(college),异常信息: %s......." % err)

print()
print('-------------------------------------------------------------------------------------------------')

print("""
    实例化对象: 通常我们要使用类中的成员及方法完成相应的业务逻辑,需要实例化该类: python中,实例化对象有两种方式:
    (1)类名+括号:  类名()
         当我们没有在类中声明__init__()方法或者时声明了__init(self)__时,实例化类就只需: 类名() 即可
    (2)类名+括号(参数列表)
         当我们声明了__init__(self,other parameters) ,方式除了有self参数外,还有我们拓展的对象成员变量时,需要使用这种方式创建类实例对象
""")


class PersonInstance:
    """类实例化的方式,重写类的init方法"""

    # 该方法在类实例化时,首先被调用,主要完成一些初始化功能
    def __init__(self, name, age, address):
        self.name = name
        self.address = address
        self.age = age
        print("name|age|address这上属性属于该类实例化后的对象的成员;这些成员变量属于所有实例对象共有")

    def getinfo(self):
        return self.name, str(self.age), self.address


person = PersonInstance("老杨", 20, "北京市海淀区中关村软件创新中心101")
print("调用类的普通方法,看法该方法返回的值 ", person.getinfo())
print("调用类的普通方法,看法该方法返回的值类型: ", type(person.getinfo()))

print()
print("隐藏调用类的初始化方法: ")


class MyChildren:
    """演示隐藏调用类的初始化化法"""

    def __init__(self):
        print("MyChildren类初始化时,init方法会被调用")


# 类初始化对象
myChildren = MyChildren()

二:静态|动态属性演示

D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\oop\ClassGrammarCreate.py 

    【面向对象OOP编程是一种编程思想:
    Python中使用关键字class来创建一个类,class之后紧根类名,并与冒号结尾】
    
调用类的静态方法: 使用类名.静态方法(类的实例化对象)
I Love You !

类的成员变量为所有对象实例共享:[静态属性]  1234

    调用类的内置属性: __name__,__doc__,__module__,__base__,__dict__
    
打印类的内置属性: 
<class 'type'>
ClassCreate
A simple example class
<class 'object'>
(<class 'object'>,)
{'__module__': '__main__', '__doc__': 'A simple example class', 'i': 1234, 'functionMethod': <staticmethod(<function ClassCreate.functionMethod at 0x0000018ACFD44D60>)>, '__dict__': <attribute '__dict__' of 'ClassCreate' objects>, '__weakref__': <attribute '__weakref__' of 'ClassCreate' objects>}

<staticmethod(<function ClassCreate.functionMethod at 0x0000018ACFD44D60>)>

     类的属性分: 
        (1)定义类时定义的属性叫静态属性
        (2)动态属性是通过:类对象.属性名=属性值的方式动态添加的属性成为动态属性


    使用一个空类,处理动态添加属性的问题,在实际引用中,所有的类都具有这种动态添加的属性的特性

访问类的动态属性: 用户的名称张三 用户的年龄: 30
删除类的动态属性: name: 使用:  del person.name
访问删除的动态属性name,异常:  <traceback object at 0x0000018ACFD54840>

   为了无上限的给类动态添加属性: 可以使用__slots__属性给类可以动态添加属性的限制,__slots__元组可以限制类中添加的属性:例如定义类的时候
   限制类只能添加动态属性: __slots__ = ('name','age','address')这些属性,如添加这些以外的属性,将会报错

例如: 我们定义Record类
Anna :  {'__module__': '__main__', '__doc__': '使用内置属性__slots__声明类的合法动态属性', '__slots__': ('name', 'age'), 'address': '北京市', 'age': <member 'age' of 'Record' objects>, 'name': <member 'name' of 'Record' objects>}
长期居住地址:  北京市

   当我们动态前景: college属性时,看看发生声明效果

添加非法的动态属性(college),异常信息: 'Record' object has no attribute 'college'.......

-------------------------------------------------------------------------------------------------

    实例化对象: 通常我们要使用类中的成员及方法完成相应的业务逻辑,需要实例化该类: python中,实例化对象有两种方式:
    (1)类名+括号:  类名()
         当我们没有在类中声明__init__()方法或者时声明了__init(self)__时,实例化类就只需: 类名() 即可
    (2)类名+括号(参数列表)
         当我们声明了__init__(self,other parameters) ,方式除了有self参数外,还有我们拓展的对象成员变量时,需要使用这种方式创建类实例对象

name|age|address这上属性属于该类实例化后的对象的成员;这些成员变量属于所有实例对象共有
调用类的普通方法,看法该方法返回的值  ('老杨', '20', '北京市海淀区中关村软件创新中心101')
调用类的普通方法,看法该方法返回的值类型:  <class 'tuple'>

隐藏调用类的初始化方法: 
MyChildren类初始化时,init方法会被调用

Process finished with exit code 0
 

后续高级用户待完善......................... 

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

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

相关文章

java对象半初始化问题是怎么回事

文章目录 一、前言1. 什么是Java对象半初始化2. 对象半初始化问题引发的影响 二、对象半初始化问题详解1. Java对象创建过程 2. 对象半初始化问题产生的原因三、实例分析&#xff1a;对象半初始化问题的表现1. 单线程环境下的半初始化2. 多线程环境下的半初始化 四、解决方案及…

Java 基于 SpringBoot 的校园疫情防控系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2.主要技术3 需求分析4系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数据库表…

预编译(1)

目录 预定义符号&#xff1a; 使用&#xff1a; 结果&#xff1a; 预编译前后对比&#xff1a; #define定义常量&#xff1a; 基本语法&#xff1a; 举例1&#xff1a; 结果&#xff1a; 预编译前后对比&#xff1a; 举例2&#xff1a; 预编译前后对比&#xff1a; 注…

嵌入式软硬件

在这里插入图片描述

APP渗透测试

APP反抓包突破 抓包失败分析 工具证书未配置 app不使用HTTP/S协议 反模拟器 1.使用真机进行抓包 2.用模拟器模拟真机 3.逆向删除反模拟器代码打包重新测试 反证书 SSL证书绑定分为单向校验和双向校验&#xff0c;单向校验就是客户端校验服务端的证书&#xff0c;双向…

回调函数的用途

一、函数指针 在讲回调函数之前&#xff0c;我们需要了解函数指针。 我们都知道&#xff0c;C语言的灵魂是指针&#xff0c;我们经常使用整型指针&#xff0c;字符串指针&#xff0c;结构体指针等 int *p1; char *p2; STRUCT *p3; //STRUCT为我们定义的结构体但是好像我们一…

【CTFHUB】SSRF绕过方法之靶场实践(二)

SSRF POST请求 提示信息&#xff1a; 这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.加油吧骚年 首先测试了http的服务请求&#xff0c;出现对话框 输入数值后提示&#xff1a;只能接受来自127.0.0.1的请求 右键查看源码发现key值 通过file协…

k8s+kubeedge+sedna安装的全套流程

一&#xff0c;环境准备 把两台虚拟机的ip地址设置成静态的IP地址&#xff0c;否则ip地址会变 虚拟机配置静态IP&#xff08;NAT模式&#xff09;_nat子网的准入_阿祖&#xff0c;收手吧的博客-CSDN博客​​​​​​ 节点IP软件 云节点192.168.133.139kubernetescloudcore边…

与初至波相关的常见误解

摘要: 初至波是指检波器首次接收到的波. 对它的误解会使我们失去重要的信息. 1. 波从震源到检波器的传导过程 从震源产生波以后, 有些波通过地面直接传导到检波器, 这些称为直达波 (面波);有些在地层中传播,遇到两种地层的分界面时 产生波的反射,在原来地层中形成一种新波, …

【算法——双指针】LeetCode 15 三数之和

题目描述&#xff1a; 解题思路&#xff1a;双指针 首先&#xff0c;按升序对数组进行排序。然后&#xff0c;我们可以用如下步骤求解&#xff1a; 初始化一个空的结果集result&#xff0c;用于存储找到的和为0的三元组。 遍历整个数组&#xff0c;直到倒数第三个元素&#xff…

基于APP数据爬取的运行环境

前提 数据爬取本就是“道高一尺&#xff0c;魔高一丈”&#xff1b;越往后&#xff0c;爬取越接近于真实&#xff0c;真实包含了真实的运行环境&#xff08;不再是简单地伪造请求、User-Agent和Cookie等&#xff09;和真实的操作流程。本文对APP的运行环境做了简单梳理以供参考…

python爬虫基于管道持久化存储操作

文章目录 基于管道持久化存储操作scrapy的使用步骤1.先转到想创建工程的目录下&#xff1a;cd ...2.创建一个工程3.创建之后要转到工程目录下4.在spiders子目录中创建一个爬虫文件5.执行工程setting文件中的参数 基于管道持久化存储的步骤&#xff1a;持久化存储1&#xff1a;保…

【Linux学习】05-1Linux上安装部署各类软件

Linux&#xff08;B站黑马&#xff09;学习笔记 01Linux初识与安装 02Linux基础命令 03Linux用户和权限 04Linux实用操作 05-1Linux上安装部署各类软件 文章目录 Linux&#xff08;B站黑马&#xff09;学习笔记前言05-1Linux上安装部署各类软件JDK安装部署Tomcat安装部署maven…

Matlab绘图函数subplot、tiledlayout、plot和scatter

一、绘图函数subplot subplot(m,n,p)将当前图窗划分为 mn 网格&#xff0c;并在 p 指定的位置创建坐标区。MATLAB按行号对子图位置进行编号。第一个子图是第一行的第一列&#xff0c;第二个子图是第一行的第二列&#xff0c;依此类推。如果指定的位置已存在坐标区&#xff0c;…

ahk系列——ahk_v2实现win10任意界面ocr

前言&#xff1a; 不依赖外部api接口&#xff0c;界面简洁&#xff0c;翻译快速&#xff0c;操作简单&#xff0c; 有网络就能用 、还可以把ocr结果非中文翻译成中文、同样可以识别中英日韩等60多个国家语言并翻译成中文&#xff0c;十分的nice 1、所需环境 windows10及其以上…

【小沐学C++】C++ 基于Premake构建工程项目(Windows)

文章目录 1、简介2、下载和安装2.1 下载2.3 快速入门 3、使用3.1 支持的工程文件Project Files3.2 构建设置Build Settings3.3 链接Linking3.4 配置Configurations3.5 平台Platforms3.6 过滤Filters3.7 预设值Tokens 4、测试4.1 测试1&#xff1a;入门例子4.2 测试2&#xff1a…

STL upper_bound和lower_bound函数

声明&#xff1a; 首先包含头文件#include<algorithm> 这里的两个函数所运用的对象必须是非递减的序列&#xff08;也就是数组&#xff0c;数组必须是非递减的&#xff09;&#xff0c;只有这样才可以使用upper_bound和lower_bound这两个函数。 还有一点&#xff0c;就…

手摸手带你 在Windows系统中安装Istio

Istio简介 通过负载均衡、服务间的身份验证、监控等方法&#xff0c;Istio 可以轻松地创建一个已经部署了服务的网络&#xff0c;而服务的代码只需很少更改甚至无需更改。 通过在整个环境中部署一个特殊的 sidecar 代理为服务添加 Istio 的支持&#xff0c;而代理会拦截微服务…

【C++】string 之 find、rfind、replace、compare函数的学习

前言 上篇文章&#xff0c;我们学习了assign、at、append这三个函数 今天&#xff0c;我们来学习find、 函数 find函数 引入 我们都知道&#xff0c;find函数可以是string类中&#xff0c;用于查找字符或者字符串的函数 也可以是&#xff0c;<algorithm>头文件中&am…

帝国CMS插件-最全免费帝国CMS插件大全

在如今的数字时代&#xff0c;网站管理员和内容创作者面临着一个共同的挑战&#xff1a;如何快速而有效地生成并发布大量内容&#xff0c;以吸引更多的用户和读者。帝国CMS&#xff08;Empire CMS&#xff09;是一个备受欢迎的内容管理系统&#xff0c;许多网站使用它来创建和管…