//class的定义及应用
class Car:
wheels=4
def driver(self):
print(“driver method”)
def stop(self):
print(“stop method”)
car1=Car()
car1.driver()
//在类中,添加两个"__"下划线,代表的是私有属性,测试代码如下:
class Car:
wheels=4
def __driver(self): #私有成员函数
print(“driver method”)
def stop(self):
self.__driver()#私有方法调用
print(“stop method”)
car1=Car()
car1.stop()
//类的构造方法和析构方法
import sys
class info:
def init(self,name,sex): #构造函数
self.name=name
self.sex=sex #这个是对象属性,而不是类属性,两者一定要清楚
def printInfo(self):
print(f"姓名:{self.name}“)
print(f"性别: {self.sex}”)
def del(self): #self这个必须写
print(“执行了析构函数”)
obj = info(“jiang”,33)
obj.printInfo()
print(sys.getrefcount(obj))
del(obj)
//类方法和静态方法
类方法的3种定义形式:1)普通的是self定义,2)(装饰器)classmethod修饰类方法,3)staticmethod修饰的静态方法
class Test:
@classmethod #@classmethod装饰器,说明是类方法,参数是cls,不是self
def useClassMethod(cls):
print(“我是类方法”)
test = Test()
test.useClassMethod() #对象名访问
Test.useClassMethod() #类名直接访问
//类属性和对象属性案例测试
class Apple: #对象属性是改变不了类属性值的!!!
count=0 #类属性
def addOne(self):
self.count=1 #对象属性
@classmethod
def addTow(cls):
cls.count=2
apple1 = Apple()
apple1.addOne()
print(apple1.count) #输出1
print(Apple.count) #输出0
Apple.addTow() #调用的是类属性
print(Apple.count) #输出2
//类的静态方法
class Example:
num=10
@staticmethod
def staticMethod(): #没有参数
print(f"类的属性值是: {Example.num}") #只能通过类名访问
print(“类的静态方法调用”)
example1 = Example()
example1.staticMethod() #对象调用
Example.staticMethod() #类直接调用
//类的继承
class Animal:
name=“动物”
def features(self):
print(“动物的普通类方法”)
class Dog(Animal): #狗继承动物
def feed(self):
print(f"狗是{self.name}") #调用的是父类的方法属性
print(“够吃骨头”)
dog = Dog()
print(dog.name) #输出[动物],调用的是父类属性
dog.features() #输出[动物的普通类方法],调用的是父类的方法
dog.feed() #调用的是子类方法,输出 【狗是动物 够吃骨头】
print(isinstance(dog,Dog)) #如果dog是Dog的对象,则返回true,否则返回false;
print(issubclass(Dog,Animal)) #返回的继承关系,如果有继承关系,则返回true,否则,返回false;
//类的多继承
class English:
def Eng(self):
print(“具备英语知识”)
class Math:
def mathKnow(self):
print(“具备数学知识”)
class Student(English,Math): #多继承
def study(self):
print(“学生的任务是学习”)
s = Student()
s.Eng()
s.mathKnow()
s.study()
//继承中的方法重写
class Felines: #feline 猫科动物
def features(self):
print(“猫科动物特长是爬树”)
class Cat(Felines):
name=“猫”
def features(self): #重写
print(f"{self.name}会抓老鼠")
print(f"{self.name}会爬树")
cat = Cat()
cat.features()
//super方法使用,子类中调用父类
class Felines: #feline 猫科动物
def features(self):
print(“猫科动物特长是爬树”)
class Cat(Felines):
name=“猫”
def features(self): #重写
print(f"{self.name}会抓老鼠")
print(f"{self.name}会爬树")
super().features() #super的使用方法,可以调用父类方法
cat = Cat()
cat.features()
//类的多态
class Animal(object): #不关心对象类型,关注的是类方法
def move(self):
pass
class Rabbit(Animal):
def move(self):
print(“兔子蹦蹦跳跳”)
class Snail(Animal):
def move(self):
print(“蜗牛缓慢爬行”)
def test(obj): #同一个函数,根据不同参数,会产生不同的方法,从而实现多态
obj.move()
rabbit= Rabbit()
test(rabbit)
snail=Snail()
test(snail)
//类的异常处理
在python中可以使用try…except语句捕获异常,try…except还可以与else,finally组合使用;
try:
可能出现错误的代码
except [异常类型]:
错误语句处理
异常案例:
i = input(“请输入数字: “)
n=12
try:
result=n/int(i) #会产生异常的代码
print(f”{n}除以{i}等于{result}”)
except:
print(“除数不能为0”)
//捕获异常信息
i = input(“请输入数字: “)
n=12
try:
result=n/int(i)
print(f”{n}除以{i}等于{result}”)
except ZeroDivisionError as e: #e是变量名,ZeroDivisionError是异常类
print(“除数不能为0”)
print(f"异常原因: {e}")
//捕获多个异常信息
try:
print(count) #引发变量没有定义异常
demoList=[“python”,“C++”,“java”]
print(demoList[4]) #异常错误原因:list index out of range
except (NameError,IndexError) as e:
print(f"异常错误原因:{e}“) #异常错误原因:name ‘count’ is not defined
//多个except情况,其实就是把异常元组拆分为多个except
try:
print(count) #引发变量没有定义异常
demoList=[“python”,“C++”,“java”]
print(demoList[4]) #异常错误原因:list index out of range
except NameError as e:
print(f"异常错误原因:{e}”)
except IndexError as e:
print(f"异常错误原因:{e}")
//异常处理->else子句
num=input(“请输入每页显示多少条数据: “)
try:
pageNum=int(num)
except Exception as e: #出错后执行的语句
pageNum=10
print(f"异常处理,当前显示{pageNum}数据”)
else: #正常处理(不出错时执行语句)
print(f"else正常语句处理: 当前显示{pageNum}数据”)
//finnally子句(无论是否出错,都会执行的语句)
num=input(“请输入每页显示多少条数据: “)
try:
pageNum=int(num)
except Exception as e: #出错后执行的语句
pageNum=10
print(f"异常处理,当前显示{pageNum}数据”)
else: #正常处理(不出错时执行语句)
print(f"else正常语句处理: 当前显示{pageNum}数据”)
finally: #无论是否出错,都会执行的语句(如文件打开后,无论是否正常,都要把文件关闭)
print(f"无论是否出错: 当前显示{pageNum}数据")
//抛出异常(raise抛出异常,人为的)
#3种:异常类名引发异常,异常对象引发异常,异常引发异常
class Test:
def fun(self):
print(“test Class handle”)
testObj = Test() #异常对象引发异常
raise testObj
raise Test #异常类引发异常
try:
num
except NameError as e:
raise #直接用raise抛出异常
//异常传递(如果异常没有被处理,就会被传递给上一级)
def getWidth():
print(“getWidth开始执行”)
num=int(input(“请输入除数: “)) #int类型转换
widthLen=10/num #这里如果是0,则传递给它的调用者calcArea函数;
print(“getWidth执行结果”)
return widthLen
def calcArea():
print(“计算面积开始”)
widthLen=getWidth() #这里异常,没有处理,进一步向上传递给showArea函数;
print(“面积计算结束”)
return widthLen*widthLen;
def showArea():
try:
print(“showArea开始执行”)
areaVal = calcArea()
print(f"正方形面积是:{areaVal}”)
print(“showArea执行结束”)
except ZeroDivisionError as e:
print(f"捕获异常:{e}”)
if name==“main”:
showArea()
//异常定制
class CustomError(Exception):
pass
try:
raise CustomError(“出现错误”) #创建一个对象CustomError
except CustomError as e:
print(e)
//模块
内置模块,第三方模块和自定义模块(每个py文件可以视作为一个模块)
模块导入两种方法:
方式1)
import 模块1,模块2
模块名.函数名()/类名
import 模块名 as 别名 #给模块起个别名
应用案例:
import time as t1
t1.sleep(1) #使用方法
print(“hello world”)
方式2)
from 模块名 import 函数/类/变量
例如: from time import sleep,time
from 模块名 import 函数名 as 别名
例如:from time import sleep as s1
//应用案例
import random,sys
from time import sleep as s1
s1(1) #使用方法
print(“hello world”)
//自定义模块
第一个main.py文件中,书写如下:
age=12
def introduce():
print(f"我叫小王,今年{age}岁")
第二个test.py文件中,书写如下:
#方法1
#方法2
from main import introduce
introduce()
//模块的导入属性(all)
__all__属性,限制导入的内容
在main.py文件中,代码如下:
all=[“add”,“substract”]
def add(a,b):
return a+b
def divide(a,b):
if b:
return a/b
else:
print(“error”)
在另一一个test.py文件,导入main.py模块,代码如下:
from main import *
print(add(2,3))
//模块的导入属性(__name__属性:测试模块功能)
__name__属性作用:如果执行的是当前测试文件,这条语句成立"name==main",
如果在其他文件调用时,"name文件名称",所以不成立;
在第一个main文件中,代码如下:
def add(a,b):
return a+b
def substract(a,b):
return a-b
def divide(a,b):
if b:
return a/b
else:
print(“error”)
if name “main”:
print(add(2,3))
print(divide(4,2))
在第二个test文件中,代码如下:
from main import *
print(add(2,3))
print(divide(4,2))
PyCharm Community Edition 2022.2
viso 有8个类别
shift + 鼠标滚轮,可以实现视图的左右和上下滚动显示
viso 绘图三要素 形状 连接线 文本
图表数据视觉化
图形方式展示数据