# 封装:将属性和方法封装到类中,通过构造类的对象来实现功能

# 在面向对象的程序设计过程中有两个重要概念:类(class)和对象(object,也被称为实例,instance),其中类是某一批对象的抽象,可以把类理解成某种概念;对象才是一个具体存在的实体。

# 定义类的关键字: class

'''

语法

class ClassName:

语句块

类中包含属性和方法

属性直接编写

方法就是函数,且这个函数第一个参数默认是self

类的命名

驼峰式命名

首字母大写,以后的每个单词的首字母均大写

不要使用中文,空格,特殊字符,关键字,保留字

属性和方法命名

小写字母,以后的每个单词前使用下划线连接 a_b

Python 的类大致有如下作用

定义变量;

创建对象;

派生子类;

'''

# 为什么会有类:比如我们要形容一个学生,这个学生学习很多门课程,如果每门课程都用一个变量去形容(或使用字典,列表去描述),那么会显得太零散,而当我们要形容的学生太多,就需要有很多变量去描述,为了解决这个问题,便有了类。我们可以给每个学生定义一个类,将这个学生相关的全部放入到这个类中

# 定义一个不包含任何类变量和方法,这个类相当于一个空类,使用 pass 语句作为占位符,空类没有太大的实际意义
class Empty:
pass
# 定义一个类
class Student:
# 类属性
name = None
# 方法,函数
def act(self):
print("跳舞")
# 对象创建
a = Student()
print(a)
print(type(a))
print(a.name)
# 操作属性,设置属性
a.name = "Tony"
# 获取属性
print(a.name)
# 调用对象的方法
# 类后面的括号代表创建对象,函数后面的括号代表调用、执行
a.act()


Python数据库封装类 python 类的封装_python类


# 构造函数 __init__
# Python 中很多以双下划线开头、双下划线结尾的方法,都具有特殊的意义
# 构造方法是一个类创建对象的根本途径,因此 Python 还提供了一个功能:如果开发者没有为该类定义任何构造方法,那么 Python 会自动为该类定义一个只包含一个 self 参数的默认的构造方法
#与函数类似的是,Python 也允许为类定义说明文档,该文档同样被放在类声明之后、类体之前
# 对象属性和类属性
class Students:
'这是Python定义的一个Students类,类说明'
# 类变量,被类和对象共有
name = None
def __init__(self,a_name):
# 成员变量,对象变量,对象独有的
self.a_name = a_name
# 下面定义了一个act方法
def act(self):
print("跳舞")
a = Students (a_name="Linda")
a.name = "Tom"
print(a.name)
print(a.a_name)
b = Students (a_name="Diana")
print(b.a_name)
print(b.name)
Students.name = "Karl"
print(a.name)
print(b.name)
c = Students(a_name="Lisa")
print(c.name)
Students.a_name = "Jack"
print(Students.a_name)
print(a.a_name)
print(b.a_name)
print(c.a_name)


Python数据库封装类 python 类的封装_类变量_02


'''

总结

是类的,也是这个类所有实例的,其实例都可以访问到;

是实例的,就是这个实例自己的,通过类访问不到

类变量是属于类的变量,这个类的所有实例可以共享这个变量

对象(实例或类)可以动态的给自己增加一个属性(赋值即定义一个新属性)

实例.dict[变量名]和实例.变量名都可以访问到自己的属性(但两种访问有本质上的区别的)

实例的同名变量会隐藏掉类变量,或者说是覆盖这个类变量,但是类变量依旧存在,并不是真正的覆盖

'''

# 对象的销毁

# 类中可以定义__del__方法,称为析构函数。

# 作用:销毁类的实例的时候调用,以释放占用的资源,其实就放些清理资源的代码。

# 注意这个方法不能引起对象的真正销毁,只是对象销毁的时候会自动调用它。

# 使用del语句删除实例,引用计数减1.当引用计数为0时,会自动调用__del__方法,由于# Python是实现了垃圾回收机制,不能确定对象何时执行垃圾回收。

class People:
def __init__(self,name,age=18):
self.name=name
self.__age=age
def __del__(self):
print(self.name)
def item():
tom=People('tom')
tom.__del__()
tom2=tom
print(1,'del')
del tom
print(2,'del')
del tom2
print('删除')
item()


Python数据库封装类 python 类的封装_Python数据库封装类_03


# item()由于垃圾回收对象销毁时,才是真正的清理对象,还会在回收对象之前自动调用__del__方法,除非你明确知道自己的目的。