1.封装:将数据放在一个列表或其他序列字典中是基于数据层面的封装,将常用的代码段打包成一个函数是基于语句层面的封装,而对象就是这两种封装的合一。对象是模拟真实世界(例如一只龟静态数据有颜色、体重等,动态数据有爬、跑等)把数据和代码都封装到一起,即对象=属性+方法;
2.创建一个对象也叫做类的实例化,举例写一个类class Turtle:在其中可以放上属性和方法(及函数),(注意这里的方法里的参数如果写了self,类似def climb(self),其中的self就相当于this,调用的时候可以不用写,直接调用tt.climb()),然后tt = Turtle(),此处tt即对象,可以调用类里的属性和方法,例如tt.color,就会输出在类里设定的属性color=green的赋值green;
3.面向对象:OO=Object Oriented,特点:
①封装:封装了属性及方法,封装是一种信息隐蔽技术,使得信息更加安全;
②继承:子类自动共享父类的属性和方法的机制,举例:
>>> class MyList(list):
pass
>>> list2 = MyList()
>>> list2.append(5)
>>> list2.append(3)
>>> list2
[5, 3]
>>> list2.sort()
>>> list2
[3, 5]
③多态:不同对象对同一方法响应不同的行动,举例:
>>> a = A()
>>> b = B()
>>> a.fun()
我是小A
>>> b.fun()
我是小B
4.self:python的self相当于C++的this指针;
5.继承:calss DerivedClassName(BaseClassName);被继承的是父类,子类可以使用父类的属性和方法,举例:
>>> class Parent:
def hello(self):
print("正在调用父类的方法")
>>> class Child(Parent):
pass #pass就是一个占位符
>>> p=Parent()
>>> p.hello()
正在调用父类的方法
>>> c=Child()
>>> c.hello()
正在调用父类的方法;
注意:如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性;
6.想要不覆写父类方法,有两个办法,一是在子类的同名方法中调用父类的该方法,二是使用super()函数,举例重名方法叫做a(),则在子类的a()方法里写super.a()就可以了;
7.python支持多重继承,即可以继承多个父类,class drivedclassname(base1,base2,base3);
8.与类和对象相关的一些BIF(内置函数):
①issubclass(class,classinfo),判断class是否是classinfo子类,如果是则返回true,需要注意:这是非严格的检查,首先一个类是被认为是其自身的子类,第二点classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回True,其余情况则抛出typeError,记住issubclass(A,object)也是返回的True;
②isinstance(object,classinfo),检查object是否是类classinfo的实例对象,同样也可传入由类对象组成的元组;
③hasattr(object,name),attr=attribute属性,测试一个对象里面是否有指定的属性,举例:
>>> class C:
def __init__(self,x=0):
self.x=x
>>> c1 = C()
>>> hasattr(c1,'x')
True
注意属性名需要被引号框起来,否则会报错;
④getattr(object,name[,default]),返回name属性的值,如果不存在该name,如果设置了default默认值,则返回默认值