1.类与对象
对象是类的实例:类主要定义对象的结构,然后以类为模板创建对象。
类不但包含方法定义,还包含所有实例共享的数据。
(1)属性和方法组成对象
对象 = 属性 + 方法
①封装:一种信息隐蔽技术
我们可以使用关键字class定义Python类,关键字后紧跟类的名称、分号和类的实现。
class Turtle: #类名约定以大写字母开头
"""举个例子"""
#属性
color = "green"
legs = 4
mouth = "big"
shell = True
weight = 10
#方法
def climb(self):
print("努力向前爬")
def run(self):
print("飞快往前跑")
tt = Turtle()
print(tt)
#<__main.__Turtle object at 0x0000007C32D67F98
print(type(tt))
#<class '__main.__Turtle>
print(tt.__class__)
#<class '__main.__Turtle>
print(tt.__class__.__name__)
#Turtle
tt.climb()
#努力向前爬
tt.run()
#飞快往前跑
print(type(Turtle))
#<class 'type'>
②继承:子类自动共享父类之间数据和方法的机制
③多态:不同对象对同一方法响应不同的行动
(2)self是什么?
Python的self相当于C++的this指针。
类的方法与普通函数只有一个特殊的区别:类的方法必须有一个额外的第一个参数名称。在调用方法时,我们无需明确提供与self相对应的参数。
(3)Python的魔法方法
类有一个名为__init__(self[, param1, param2…])的魔法方法,该方法在类实例化时会自动调用。
(4)公有和私有
在变量名或函数名前加上两个下划线“__”,这个变量或函数就是私有的。
(5)继承
Python同样支持类的继承,派生类的定义如下:
如果子类中定义与父类同名的方法或属性,则会自动覆盖父类的方法或属性·。
注:如果上面的程序去掉 pepple.init(self, n, a, w)
则输出 说:我 0 岁了,我在读 3 年级
一般不使用多继承,容易引起混乱。
(6)组合
(7)类、类对象和实例对象
类对象:创建一个类,其实也是一个对象也在内存开辟了一块空间,称为类对象。
类对象只有一个
class A(object):
pass
实例对象:通过实例化类创建的对象,称为实例对象。
实例对象可以有多个
class A(object):
pass
#实例化对象a,b,c都属于实例对象
a = A()
b = B()
c = C()
类属性:类里面方法外面定义的变量称为类属性。类属性所属于类对象,并且多个实例对象之间共享同一个类属性。
class A():
a = 0 #类属性
def __init__(self, xx):
A.a = xx #使用类属性可以通过(类名,类属性)调用
实例属性:实例属性和某个具体的实例对象有关系,并且一个实例对象和另一个实例对象之间是不共享属性的。
注意:属性和方法名相同时,属性会覆盖方法!
(8)什么是绑定?
绑定:Python严格要求方法要有实例才能被调用。
Python对象的数据属性通常存储在名为.dict__的字典中,我们可以直接访问__dict,或者利用Python的内置函数vars()获取。
(9)一些相关的内置函数(BIF)
issubclass(class, classinfo)方法用于判断参数class是否是类型参数classinfo的子类。
一个类被认为是其自身的子类。
classinfo可以是类对象的元组,只要class是其中任何一个候选类的子类,则返回True。
isinstance(object, classinfo)方法用于判断一个对象是否是一个已知的类型,类似type().
如果第一个参数不是对象,则永久返回False.
如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常。
hasattr(object, name)用于判断对象是否包含对应的属性。
gatattr(object, name[, default])用于返回一个对象属性值。
setattr(object, name, value) 对应函数getattr(),用于设置属性值,该属性不一定存在。
detattr(object, name)用于删除属性。
class property([fget[, fset[, fdel[, doc]]]])用于在新式类中返回属性值。
其中,fget:获取属性值的函数;fset:设置属性值的函数;
fdel:删除属性值函数;doc:属性描述信息。