1.基本概念
对象:object,
类:一种事物的范称,一种归纳一种抽象,如鼠标
实例:具体的某个类的一个对象 叫实例
2. 面向对象 面向过程
针对一件事情,第一步 第2步 第3步 面向过程
面向对象: 关注一个对象具备哪些方法和属性。
3. 对象(属性及方法)
属性:封装, 继承,多态
方法:类方法,静态方法,实例方法
实例方法
必须由实例调用,先要有个实例,然后才能调用实例方法。定义时第一个参数必须为self
类方法:定义时第一个参数必须为cls, 并且要加classmethod装饰器@classmethod # 类方法 cls:代表类本身
def get_class_name(cls):
实例可以调用,类也可以调用。
静态方法:定义时参数没什么要求,加@staticmethod 装饰器 self cls类可以调用实例可以调用, 和调用 ”其他函数“ 一样。
方便直接去使用一些公用的函数或把部分复杂逻辑抽象出来。
静态方法中做的事情不依赖我们的实例或对象
4. 类的定义
class Fish:
def __init__(self):
pass
def get_name(self):
pass
5.判断类型
isinstance(实例,类) 判断实例是否为类的一个对象。
新式类,经典类(无继承)
class Fish: # 经典类, 不继承自任何类的 python2.2
class Dog(object): # 新式类, 必须继承自某个类。 如果没有那就是继承自 object,从python2.2之后
python3: 都是新式类 class Fish: 新式类, class Fish(object):
6. 初始化方法, 构造方法, 析构方法
这三个方法可以完全不定义了。
__init__ __new__ __del__
__new__ __init__ __del__
__init__: 初始化方法。 对已产生的实例做一些初始化事情。
__new__: 构造方法 产生一个具体的实例
__del__: 析构方法 做些收尾工作, 垃圾回收清理。 引用计数
__call__: 特殊方法:把类实例化后的对象当做函数来调用的时候自动被调用
eg.__call__方法的使用:
import random
class A:
def __init__(self,items):
self._items = list(items)
random.shuffle(self._items)
def pick(self):
try:
return self._items.pop()
except IndexError:
raise LookupError('pick from empty A')
def __call__(self, *args, **kwargs):
return self.pick()
B = A(range(3))
print(B.pick())
7.访问作业域控制变量
1)__init__ 左右两边两个下划线,表示类的调用
2)__age: 左边两个下划线,私有变量
3)_age: 左边一个下划线,保护变量
举例说明:
class Student:
def __init__(self,name,age,class_):
self.name = name
self.age = age
self.class_ = class_
print("这里调用了__init__方法")
def __new__(cls,*args,**kwargs):
print('这是调用了__new__调用了一个实例')
return object.__new__(cls)
def __del__(self):
print('这是调用了析构函数')
class Boy(Student):
def __init__(self,name,age,class_,score):
self.score = score
super(Boy,self).__init__(name,age,class_)
print('%s,%d,%s,%d' %(self.name,self.age,self.class_,self.score))
def get_score(self):
print('成绩为:%d' %(self.score))
@classmethod
def get_name(cls,name):
cls.name = name
print(cls.name)
@staticmethod
def get_class(class_):
return class_
A=Boy('小明',age=18,class_='python',score=19)
A.get_score()
A.get_name('xiaohu')
print(A.get_class(class_='python1'))