类的相关知识点梳理
1. 类: 实体类, 业务类, 界面(UI)类
(1)定义类:
1) 类的对象的构造方法
class Stu(object):
def __init__(self):
print(‘类的对象的构造方法’)
2)类的方法
@classmethod
def list_stus(cls):
print(‘类的方法’)
3)类的静态方法
@staticmethod
def addStu(stu):
print(‘类的静态方法’)
类中的方法有三种类型: 对象方法, 类方法,类的静态方法
2. 对象的创建
类名(初始化参数) : Stu(), 在内存的堆中开辟一块内存区域(链表结构), 创建对象之后,返回对象所在内存区域的首地址。对于返回的首地址,可以赋给一个变量,这个变量就变成了对象的引用。通过对象的引用可以访问对象的属性和方法。 创建对象时, 默认调用类的构造方法__init__(self)。
3. 对象的销毁
1)del 对象引用名,删除对象引用指向的内存区域, 默认会调用类的析构方法__del__(self)
2) 如果删除的对象中存在其它引用,则不会删除内存区域。
举例如下:
s = Stu()
b = s
del s # 不会调用类的__del__()方法
del b # 会调用类的__del__()方法
4. 类对象之间的关联关系
举例如下:
class Card:
def__init__(self,number,money,passwd):
self.number = number
self.money = money
self.passwd = passwd
def show(self):
print(‘—card show()—’)
class User:
def__init__(self,name,bank_card)
self.name = name
self.bank_card = bank_card
#用户和银行卡是一对一的关系
def __del__(self):
print(‘--User--del’)
5.对象之间的引用:
card = Card(3, 0, ’10010’)
user = User(‘Judy’, card)
del card # card 引用名从栈中删除了
card.number # 报card没有声明或签名。
user.bank_card.numer # 可以输出,显示用户的银行卡的卡号
user.bank_card.show() # 可以输出, 使用对象的引用,可访问对象的属性和执行对象的方法
del user # 是否执行 User类中的__del__函数?
可以的,因为栈中user的指向堆中的类User,删除栈中的对象user,那么堆中的User没有了引用,系统便可以回收堆中的User,所以执行del user ,就等同于执行了类中User类的__del__函数!!!