OOP
OOP
https://blog.csdn.net/yjk13703623757/article/details/77918633
1. 创建类
name
- 每个 Python 模块都包含内置的变量 name,当模块运行时,__name__等于文件名(包含了后缀.py)
- 如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)
main - “main”等于当前执行文件的名称(包含了后缀.py)。
所以当模块被直接执行时,name == 'main'结果为真;而当模块被import到其他模块中时,name == 'main'结果为假,就是不调用对应的方法。
class Employee:
empCount = 0 # static
# self 类似 Java 中的 this
def __init__(self, name, salary): # 构造器:self 代表类的实例,self 在定义类的方法时是必须有的(虽然在调用时不必传入相应的参数)
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print("Name : ", self.name, ", Salary: ", self.salary)
if __name__ == '__main__':
e = Employee("kobe", 200) # 创建对象
e.displayCount()
e.displayEmployee()
# 访问属性的方法
print(hasattr(e, 'name')) # f存在属性,返回 true
print(getattr(e, 'name'))
setattr(e, 'name', 'Jack') # Setter
print(getattr(e, 'name'))
delattr(e, 'name') # 删除属性
print(hasattr(e, 'name'))
2. 内置类属性
- dict : 类的属性(包含一个字典,由类的数据属性组成)
- doc :类的文档字符串
- name: 类名
- module: 类定义所在的模块(类的全名是'main.className',如果类位于一个导入模块mymod中,那么className.module 等于 mymod)
- bases : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
3. 垃圾回收
一个内部跟踪变量,称为一个引用计数器
垃圾回收机制不仅针对引用计数为0的对象,同样也可以处理循环引用的情况。循环引用指的是,两个对象相互引用,但是没有其他变量引用他们。这种情况下,仅使用引用计数是不够的。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。作为引用计数的补充, 垃圾收集器也会留心被分配的总量很大(即未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下来, 试图清理所有未引用的循环。