Python中高级语法学习篇、Python面向对象、Python文件读写IO流、Python 线程、Python 操作 MySQL数据库、SMTP发送邮件、python网络编程

深入学习python中...

1.python 面向对象

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

class Employee:
    '员工'
    emCount=0
    
    def __init__(self,name,salary,age):
        self.name=name
        self.salary=salary
        self.age=age
        Employee.emCount= Employee.emCount+1
    
    def displayCount(self):
        print("employee count %d" % Employee.emCount)
        
    def displayEmployee(self):
        if hasattr(self, 'age'):
            print("Name: " + self.name + ", Salary: " + str(self.salary) + ", Age: " + str(self.age))
        else:
            print("Name: " + self.name + ", Salary: " + str(self.salary) + ", Age not specified")
        
#创建
em1 = Employee("zero",2400,18)
print("Does em1 have 'age' attribute?", hasattr(em1, 'age'))  # True
print("Value of 'age' attribute in em1:", getattr(em1, 'age'))  # 输出属性值
em1.displayEmployee()
setattr(em1, 'age', 8) # 添加属性 'age' 值为 8
em1.displayEmployee()
delattr(em1, 'age')    # 删除属性 'age'
em1.displayEmployee()
    
em2 = Employee("one",2500,20)
em2.displayEmployee()

print ("Total Employee %d" % Employee.emCount)

#类的文档字符串
print ("Employee.__doc__:", Employee.__doc__) #Employee.__doc__: 员工
#类名
print ("Employee.__name__:", Employee.__name__) #Employee.__name__: Employee
#类定义所在的模块_
print ("Employee.__module__:", Employee.__module__) #Employee.__module__: __main__
#类的所有父类构成元素
print ("Employee.__bases__:", Employee.__bases__) #Employee.__bases__: (<class 'object'>,)
#类的属性(包含一个字典,由类的数据属性组成)
print ("Employee.__dict__:", Employee.__dict__)

继承、重写

class ParentClass:
    parentAttr=1000
    def __init__(self):
        print("调用父类的构造器")
    def parentMothed(self):
        print("调用父类的方法")
    def getAttr(self):
        print("父类的属性:",ParentClass.parentAttr)
    def setAttr(self,parentAttr):
        ParentClass.parentAttr =parentAttr
    def myMethod(self):
        print ('调用父类方法')

class ChildClass(ParentClass): # 定义子类
   def __init__(self):
      print ("调用子类构造方法")
 
   def childMethod(self):
      print ('调用子类方法')
   def myMethod(self):
      print ('调用子类方法')
      
c = ChildClass()          # 实例化子类
c.childMethod()      # 调用子类的方法
c.parentMothed()     # 调用父类方法
c.getAttr()          # 再次调用父类的方法 - 获取属性值1000
c.setAttr(200)       # 再次调用父类的方法 - 设置属性值
c.getAttr()          # 再次调用父类的方法 - 获取属性值200
c.myMethod()         #调用子类方法  方法重写

python正则表达式

import re
print(re.match('www', 'www.baidu.com').span())  # 在起始位置匹配
print(re.match('com', 'www.baidu.com'))         # 不在起始位置匹配

print(re.search('www', 'www.baidu.com').span())  # 在起始位置匹配
print(re.search('com', 'www.baidu.com').span())  # 不在起始位置匹配


phone = "2004-959-558 # 这是一个国外电话号码"
 
# 删除字符串中的 Python注释 
num = re.sub(r'#.*$', "", phone)
print ("电话号码是: ", num)
 
# 删除非数字(-)的字符串 
num = re.sub(r'\D', "", phone)
print ("电话号码是 : ", num)

文件读写流

import os
fo = open("file.txt", "a+")
print ("文件名: ", fo.name)
print ("是否已关闭 : ", fo.closed)
print ("访问模式 : ", fo.mode)
fo.write( "www.baidu.com!\nVery good site!\n")
# 关闭打开的文件
fo.close()

fo = open("file.txt", "r+")
str = fo.read(10)
print ("读取的字符串是 : ", str)
 
# 查找当前位置
position = fo.tell()
print ("当前文件位置 : ", position)
 
# 把指针再次重新定位到文件开头
position = fo.seek(0, 0)
str = fo.read(10)
print ("重新读取字符串 : ", str)
# 关闭打开的文件
fo.close()

# 给出当前的目录
print (os.getcwd())

线程

import threading
import time

# 为线程定义一个函数
def print_time(threadName, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print(f"{threadName}: {time.ctime(time.time())} count:{count}")

# 创建两个线程
try:
    thread1 = threading.Thread(target=print_time, args=("Thread-1", 2))
    thread2 = threading.Thread(target=print_time, args=("Thread-2", 4))
    
    # 启动线程
    thread1.start()
    thread2.start()
    
    # 等待线程完成
    thread1.join()
    thread2.join()
except Exception as e:
    print(f"Error: {e}")

print("Exiting Main Thread")

从threading.Thread继承

import threading
import time

exitFlag = 0

class MyThread(threading.Thread):
    def __init__(self, threadID, name, counter):
        super().__init__()
        self.threadID = threadID
        self.name = name
        self.counter = counter

    def run(self):
        print(f"Starting {self.name}")
        print_time(self.name, self.counter, 5)
        print(f"Exiting {self.name}")

def print_time(threadName, delay, counter):
    while counter:
        if exitFlag:
            threading.currentThread().exit()
        time.sleep(delay)
        print(f"{threadName}: {time.ctime(time.time())}")
        counter -= 1

# 创建线程
thread1 = MyThread(1, "Thread-1", 1)
thread2 = MyThread(2, "Thread-2", 2)

# 启动线程
thread1.start()
thread2.start()

# 等待线程完成
thread1.join()
thread2.join()

print("Exiting Main Thread")

python网络编程

服务端:

import socket  # 导入 socket 模块

s = socket.socket()  # 创建 socket 对象
host = socket.gethostname()  # 获取本地主机名
port = 12345  # 设置端口
s.bind((host, port))  # 绑定端口

s.listen(5)  # 等待客户端连接
print('服务器已启动,等待连接...')

while True:
    c, addr = s.accept()  # 建立客户端连接
    print('连接地址:', addr)
    message = '欢迎访问python教程!'.encode('utf-8')  # 将字符串编码为 UTF-8 字节对象
    c.send(message)  # 发送字节对象
    c.close()  # 关闭连接

客户端

import socket  # 导入 socket 模块

s = socket.socket()  # 创建 socket 对象
host = socket.gethostname()  # 获取本地主机名
port = 12345  # 设置端口

try:
    s.connect((host, port))  # 连接到指定主机和端口
    print('连接成功')
    msg = s.recv(1024)  # 接收数据
    print('从服务器接收到的消息:', msg.decode())  # 解码消息
except ConnectionRefusedError:
    print('连接被拒绝,请确保服务器正在运行并且地址与端口号正确')
finally:
    s.close()  # 关闭连接

SMTP发送邮件

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = '257xxxx290@qq.com' #发送方
receivers = ['myxxxxxcloud@163.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') #邮件内容
message['From'] = sender   # 发送者
message['To'] = ', '.join(receivers)  # 接收者

subject = 'Python SMTP 邮件测试'  #邮件标题
message['Subject'] = subject

try:
    # 使用 QQ 邮箱的 SMTP 服务器
    smtpObj = smtplib.SMTP('smtp.qq.com', 587)
    smtpObj.starttls()  # 启用 TLS 加密
    smtpObj.login(sender, 'xxxxxtxxdjtidihd')  # 登录 QQ 邮箱,使用授权码代替密码
    smtpObj.sendmail(sender, receivers, message.as_string())
    print("邮件发送成功")
except smtplib.SMTPAuthenticationError:
    print("认证错误: 请检查你的授权码是否正确")
except smtplib.SMTPConnectError:
    print("连接错误: 无法连接到 SMTP 服务器,请检查网络连接和 SMTP 服务器地址")
except smtplib.SMTPException as e:
    print(f"SMTP 错误: {e}")

Python JSON

import json
 
# Python 字典类型转换为 JSON 对象
data = {
    'no' : 1,
    'name' : 'Runoob',
    'url' : 'https://www.baidu.com'
}
 
json_str = json.dumps(data)
print ("Python 原始数据:", repr(data))
print ("JSON 对象:", json_str)

# 将 JSON 对象转换为 Python 字典
data2 = json.loads(json_str)
print ("data2['name']: ", data2['name'])
print ("data2['url']: ", data2['url'])

Python 操作 MySQL数据库

#import MySQLdb
import pymysql
# 连接 MySQL 数据库示例
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='wxxxx456',
                             database='layy',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

# 示例查询
try:
    with connection.cursor() as cursor:
        sql = "SELECT * FROM employee limit 10;"
        cursor.execute(sql)
        result = cursor.fetchall()
        print(result)
finally:
    connection.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值