Python进阶和高阶学习(持续更新)

news/2024/11/14 15:02:23/

Python 面向对象

创建类

python"># Python面向对象
# 创建类
# 使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:
# class ClassName:
#    '类的帮助信息'   #类文档字符串
#    class_suite  #类体
class Employee:'所有员工的基类'# 类变量empCount = 0# 构造函数(方法)def __init__(self,name,salary):self.name = nameself.salary = salaryEmployee.empCount += 1# 这两个是实例方法 创建实例 实例数量def displayCount(self):# empCount变量是一个类变量,他的这个值在这个类的所有实例之间共享# 你可以在内部类或外部类使用Employee.empCount访问。print("Total Employee %d" % Employee.empCount)def displayEmployee(self):print("Name :",self.name, ",Salary:",self.salary)# self代表类的实例,而非类
# 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
class Test: #定义一个叫Test的类def prt(self):#定义了一个实例方法 prt,它有一个参数 self,代表类的实例本身print(self)#打印出当前实例对象的内存地址,即 self 的值。print(self.__class__)#打印出当前实例所属的类对象,即 Test 类的类对象。t = Test() #调用实例方法
t.prt()#解析输出# self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的:
class Test:def prt(runoob):print(runoob)print(runoob.__class__)t = Test() #调用实例方法
t.prt()#解析输出

创建实例对象

python"># 创建实例对象
# 以前学java一般用关键字new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。
# "创建 Employee 类的第一个对象"
emp1 = Employee("jfh",2000)
# 二
emp2 = Employee("jgj",3000)

访问属性

python">   # 访问属性 使用点号 . 来访问对象的属性。使用如下类的名称访问类变量:emp1.displayEmployee()emp2.displayEmployee()print("Total Employee %d" % Employee.empCount)# 增删改 类的属性
emp1.age = 7
emp1.age = 8
del emp1.age

Python内置类属性

python"># Python内置类属性
# __dict__ 类的属性
# __doc__ 类的文档字符串
# __name__ 类名
# __module__ 类的定义所在模块
# __bases__ 类的所有父类构成元素# eg:
class Employee:empCount = 0def __init__(self,name,salary):self.name = nameself.salary = salaryEmployee.empCount += 1def displayEmployee(self):print("Total Employee %d" % Employee.empCount)def displayEmployee(self):print("Name : ", self.name,  ", Salary: ", self.salary)
print ("Employee.__doc__:", Employee.__doc__)
print ("Employee.__name__:", Employee.__name__)
print ("Employee.__module__:", Employee.__module__)
print ("Employee.__bases__:", Employee.__bases__)
print ("Employee.__dict__:", Employee.__dict__)

python对象销毁(垃圾回收)

python">a = 40 #创建对象
b = a #增加引用  <40> 的计数
c = [b] # 增加引用 <40> 的计数del a # 减少引用 <40> 的计数
b = 100 # 减少引用 <40> 的计数
c[0] = -1 # 减少引用 <40> 的计数# 析构函数 __del__ ,__del__在对象销毁的时候被调用,当对象不再被使用时,__del__方法运行:
# 通常你需要在单独的文件中定义一个类
#类定义
class Point:def __init__(self,x=0,y=0):#类的构造函数,用于初始化对象,self.x = xself.y = y# 析构函数def __del__(self):#类的析构函数,当对象被删除时调用。class_name = self.__class__.__name__#获取类的名称print(class_name,"销毁")
# 对象创建和引用
#创建一个 Point 类的实例 pt1。
# 调用 __init__ 方法初始化对象。
pt1 = Point()
pt2 = pt1
pt3 = pt1#打印对象的内存的地址
print(id(pt1),id(pt2),id(pt3))
# 删除对象引用
del pt1
del pt2
del pt3

类的继承

python"># 定义父类
class Parent:parentAttr = 100#类属性def __init__(self):#类的构造函数print("调用父类构造函数")#定义一个实例方法def parentMethod(self):print('调用父类方法')def setAttr(self,attr):Parent.parentAttr = attrdef getAttr(self):print("父类属性 :", Parent.parentAttr)# 定义子类
class Child(Parent):def __init__(self):print("调用子类构造方法")def childMethod(self):print('调用子类方法')c = Child()          # 实例化子类
c.childMethod()      # 调用子类的方法
c.parentMethod()     # 调用父类方法
c.setAttr(200)       # 再次调用父类的方法 - 设置属性值
c.getAttr()          # 再次调用父类的方法 - 获取属性值

类属性与方法

python">
# 类的方法 类的私有方法
class JustCounter:__secretCount = 0publicCount = 0def count(self):self.__secretCount += 1self.publicCount += 1print(self.__secretCount)counter = JustCounter
counter.count()
counter.count()
print(counter.__secretCount)# 单下划线、双下划线、头尾双下划线说明:
# __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
# _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
# __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。


http://www.ppmy.cn/news/1501952.html

相关文章

axure制作切换栏--动态面板的应用

先看下效果&#xff1a;点击上面的切换栏 切换到西游记栏目&#xff1a; 切换到水浒传栏目&#xff1a; 上述两个图片比对可以发现&#xff0c;在点击切换栏的时候&#xff0c;里面的内容以及切换栏的下面蓝色横线也会发生对应的变化。这里涉及到两个地方的变化&#xff0c;就…

学习笔记 韩顺平 零基础30天学会Java(2024.7.24)

P416 匿名内部类本质 IA tiger new IA(){//IA是一个接口 //重写 System.out.println(“老虎叫唤。。。”); } P417 匿名内部类使用 基于类的匿名内部类 Father father new father(“jack”){};//不带大括号运行类型是Father&#xff0c;带大括号就是匿名内部类,相当于是匿名…

Laravel自定义辅助函数:提升开发效率的秘诀

Laravel自定义辅助函数&#xff1a;提升开发效率的秘诀 在Laravel框架中&#xff0c;辅助函数&#xff08;Helpers&#xff09;是一组用于简化日常编程任务的轻量级工具。它们帮助开发者以更少的代码完成更多的工作。虽然Laravel已经提供了丰富的内置辅助函数&#xff0c;但在…

C++ std::vector及使用时的常见优化策略

std::vector 是 C 标准模板库&#xff08;STL&#xff09;中的一个动态数组容器。它提供了动态大小调整和高效的随机访问功能&#xff0c;非常适合需要频繁插入、删除和访问元素的场景。std::vector 是在 <vector> 头文件中定义的&#xff0c;并且位于 std 命名空间中。 …

C++设计模式PIMPL模式

Pimpl是“Pointer to implementation”的缩写&#xff0c;它是一种常用的C设计模式。这种模式的核心思想是将类的实现细节从其接口中分离出来。想象一下&#xff0c;我们生活的世界中充满了这种分离&#xff1a;我们不需要知道电视是如何工作的&#xff0c;只需要知道如何使用遥…

爱快路由的dns强制客户端代理真是个强大的功能

大致情况是这样的&#xff1a;同事说在linux服务器/etc/resolv.conf上随便写个IP地址【不在线的】&#xff0c;dns地址也能解析&#xff0c;让我帮忙查查。 我看了下也感觉纳闷&#xff0c;试了下不光在服务器上&#xff0c;我本地的pc随便设置了个dns解析也是一样的。 通过wir…

国科大作业考试资料-人工智能原理与算法-2024新编-第十二次作业整理

袋子里面有3个有偏差的硬币a、b和c,抛掷硬币正面朝上的概率分别是20%、60%和80%。从袋 子里随机取出一个硬币(3个硬币被取出的概率是相等的),并把取出的硬币抛掷3次,得到抛掷结 果依次是X1 , X2和 X3。 a. 画出对应的贝叶斯网络并定义必要的CPT表。 b. 如果抛掷结果是…

PHP接入consul,注册服务和发现服务【学习笔记】

PHP接入consul,注册服务和发现服务 consul安装 链接: consul安装 启动consul C:\Users\14684>consul agent -dev安装TP5 composer create-project topthink/think5.0.* tp5_pro --prefer-dist配置consul 创建tp5_pro/application/service/Consul.php <?php /*****…