面向对象:将数据与函数绑定到一起,就是对变量与函数的封装
#定义类
class Name(object): # 大驼峰命名方法
__slots__=("property")
property= #类属性
__property= #类私有属性
def __new__(cls):#创建实例对象,用于实现单一实例
def __del__(self): #当对象死亡时调用(程序终止时,对象也死亡)
def __str__(self):#用print打印对象时,用于显示对象基本信息,默认的是对象的地址
def __int__(self,arg1,arg2):#初始化实例对象
self.property= arg1#实例对象属性
self.__property= arg2 #实例对象私有属性
def func(self): #实例独享方法
def __func(sefl): #实例对象私有方法
@classmethod
def func(cls): #类对象方法
@staticmethod()
@property
类属性
类对象属性,它被所有的类对象和实例对象所共有,在内存中只有一个地址
如果实例对象,添加了类对象相同的属性名,则会优先调用实例对象的属性。
类方法 @classmethod
类方法,它倍所有的类的对象和实例所共有,第一个参数必须是类对象,一般用"cls"来表示
静态方法 @staticmethod
静态方法不需要多定义参数,静态方法中引用类属性的话,必须通过类对象来引用
@property
讲方法转换为属性
- self 关键字 指代对象自己,类的方法要传递自己self这是一个编码规范
- 私有属性,私有方法都不可以在类外面被调用(只可以通过类内部的方法来调用),这种特性用来保护比较重要(可能会更改失误,或者不想被其他人知道)的属性和方法,使得只能通过if中的特殊条件才能访问
- del obj删除的是引用,sys.getrefcount()获得对象的引用计数
- 类属性和方法是所有对象共用的
实例化
- 调用__new__方法(new__默认会调用object的__new(cls)方法来创建类对象)
- 调用__init__方法(实例会去类里面找,__init__是类里面的方法)
(2和3合起来是构造方法) - 返回对象的引用
其他
下划线的作用
name:公有
_name:模块私有,import *
_name:类私有,模块私有,import *;(其实可以用变成了_class__name)
name:Python系统方法
name:避免冲突
getter和setter方法
name = property(getter,setter) 相当于对方法名的封装
相当于@property 方法名就是属性
Python 闭包
定义函数不会被执行,只有在调用的时候才会返回执行
闭包: 就是函数的嵌套,然后返回内层函数的引用