面向对象
class Person(object): --类
def __init__(self,name): --初始化函数 构造方法
self.name = name --
print ‘---create :’,name
def say_name(self): --方法
print ‘my name is %s’ %self.name
p1 = Person(‘gf1’) --实例化
p2 = Person(‘gf2’)
p1.say_name() --person.say_name(p1)
p2.say_name() --person.say_name(p2)
应用场景:1.多个函数需要使用共同的值
2.需要创建多个事物,每个事物属性个数相同,但是值不相同
特性:
一、封装 将传进来的变量和类的指针封装在对象中,放在内存里,通过对象直接或self间接来调用变量
二、继承 class s(f): 派生类继承了基类里的方法,不用再重复写相同功能的方法
多继承,派生类可以继承多个基类,寻找方法的方式有 深度优先与广度优先
当类是经典类时,多继承的情况下,深度优先
当类是新式类时,多继承的情况下,广度优先
如果当前类或者基类继承了object类,则是新式类,否则为经典类
经典类: class c1: 新式类:class c1(object):
pass pass
class c2(c1): class c2(c1):
pass pass
三、多态 python中没有
成员:
字段 方法和属性
其中,只有普通字段是封装在对象中,其它都保存在类中,无论有多个对象,它们在内存中只创建一份
- 字段
普通字段、静态字段
普通字段由对象访问,静态字段由类访问(对象也可以访问)
能否改静态字段?能
- 方法
普通方法 由对象调用,至少一个self参数,执行时,自动将调用该方法的对象 赋给self
静态方法 由类调用,没有默认参数,相当于类内的函数,这样就可以不通过对 象来调用方法而直接通过类来访问这个方法
类方法 由类调用,到少一个cls参数,执行时,自动将调用该方法的类复制 给cls;相当于只能带cls参数的静态方法
class F(object):
def __init__(self,name):
self.name =name
def f1(self):
pass
@classmethod
def f2(cls):
pass
@staticmethod
def f3():
pass
obj = F()
obj.f1()
F.f2()
F.f3()
- 属性
属性就是普通方法的变种,访问属性时就像访问字段一样
1. 属性的基本使用
定义时,在普通方法的基础上添加@property装饰器
定义时,仅有一个self参数
调用时,不需要括号
2. 定义方式
装饰器,即在方法上应用装饰器
@property @方法名.setter @方法名.deleter (获取 修改 删除)
静态字段,即在类中定义值为property对象的静态字段
字段 = property(方法)
- 类成员修饰符
公有成员 在任何地方都能访问
私有成员 只有在类内部才能访问 __name
__dict__ 能不能改?