Python学习手札(八)类与对象

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:属性描述信息。
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值