廖雪峰Python总结4

pythonlearing 2021-09-06 原文


廖雪峰Python总结4

面向对象编程

将计算机程序视为一系列的命令集合。包含:

  • 数据
  • 操作数据的函数

 

Python中,所有的数据类型都可以视为对象。

面向对象特点:封装,继承,多态。

类的函数和普通函数:类的第一个参数永远是实例变量self,并且调用时不用传递该参数。

如果要让内部属性不被外部访问,可以把属性名称前加上两个下划线__。如果实例的变量名以__开头,就变成了一个私有变量。可以内部访问,不能外部访问。

 

 继承与多态

新的类称为子类(Subclass),而被继承的类被称为基类,父类或者超类(Base class,Super class)。

判断一个变量是否是某个类型可以用isinstance(变量,类型)判断。

在继承关系中,如果一个实例的数据类型是某个子类,那么他的数据类型也可以被看做是父类,但是反过来就不可以。

 

获取对象信息:

1.type():判断对象类型,当一个变量指向函数或类时,也可以用type()判断。type返回对应的class类型。

2.isinstance():判断一个对象是否是某种类型。

3.dir():获得对象的所有属性和方法。它返回一个包含字符串的list。类似于__xxx__的属性和方法在python中都是有特殊用途的。比如__len__返回长度。如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法。以下代码等价:

len(\'ABC\')
\'ABC\'.__len__()

 

常用定制对象:

1.__slots__:定义类时,限制该类的实例能添加的属性。(只对当前类起作用,除非在子类中也定义__slots__,这样,子类允许定义的属性就是自生的__slots__加上分类的)

 

2.@property:后续更新

 

3.__str__:使用print(对象名)返回字符串描述,给用户看的。

 

4.__repr__:直接调用对象名返回的字符串描述,给系统看的。

 

5.__iter__:类想被for … in 循环,实现类似于list循环功能,该方法返回一个迭代对象。for循环不断调用failed迭代对象的__next__()方法拿到循环下一个值,指导遇到StopIteration时退出。

 我们以斐波那契数列为例,写一个Fib类,可以作用于for循环:

class Fib(object):
    def __init__(self):
        self.a,self.b=0,1
    
    def __iter__(self):
        return self
        
    def __next__(self):
        self.a,self.b=self.b,self.a+self.b
        if self.a>100000:
            raise StopIteration()
        return self.a

for n in Fib():
    print(n)

 

6.__getitem__:能够使用功能下标取出元素。

class Fib(object):
    def __getitem__(self,n):
        a,b=1,1
        for x in range(n):
            a,b=b,a+b
        return a

f=Fib()
for i in  range(10):
    print(f[i])

但是若想要实现切片,实现负数取元素,实现隔几个元素取元素,还需要在__getitem__中做出正确的操作。

若想要是实现切片操作,如下:

class Fib(object):
    def __getitem__(self,n):
        if isinstance(n,int):
            a,b=1,1
            for x in range(n):
                a,b=b,a+b
            return a
        if isinstance(n,slice):
            start=n.start
            stop=n.stop
            if start is None:
                start=0
            a,b=1,1
            L=[]
            for x in range(stop):
                if x>=start:
                    L.append(a)
                a,b=b,a+b
            return L


f=Fib()
print(f[0:5])

 

7.__getattr__:当对象调用不存在的属性时,Python解释器会试图调用__getattr__方法来尝试获得属性。当在__getattr__中没有的属性时,则返回自己约定的AttributeError的错误。

 

8.__call__:可以用:对象名()调用定义的__call__()方法。

 

多重继承:

通过多重继承,一个子类就可以同时获得多个父类的所有功能。

 

元类:(后续操作)

 

发表于
2018-10-08 15:12 
小纯洁的兄弟 
阅读(301
评论(0
编辑 
收藏 
举报

 

版权声明:本文为pythonlearing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/pythonlearing/p/9754513.html

廖雪峰Python总结4的更多相关文章

随机推荐

  1. 使用Vue-TreeSelect组件的时候,用watch变量方式解决弹出编辑对话框界面无法触发更新的问题

    使用Vue-TreeSelect组件的时候,用watch变量方式解决弹出编辑对话框界面无法触发更新的问题 在前 […]...

  2. Wpf 正常关闭程序 Gc 来不及回收?

    最近在使用Udp开发客户端,发现很长时间GC都无法回收UdpClient,所以我决定强制标记Gc,非常奇怪的是 […]...

  3. 把web项目部署到阿里云linux服务器上

    最近弄了个试用阿里云服务器倒腾了半天终于部署好,分享一下。 1.登入阿里云打开你申请的是云服务器的实例: 点击 […]...

  4. 配置KindEditor富文本编辑器

    第一步:首先我们要到KindEditor官网下载资源包-点击进入官网下载KindEditor资源包 第二部:在 […]...

  5. HTML5 & MUI 界面样式

    垂直居中+自动换行 样式效果如下所示,当文字没有超出一行时,显示如“备注信息”,当文字超出一行时,显示如“维修 […]...

  6. Java开发架构篇:DDD模型领域层决策规则树服务设计

    作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获! 一、 […]...

  7. 在工作中常用到的SQL

    前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com […]...

  8. 图论基础(自认为很全)

    什么是图 在一个社交网络中,每个帐号和他们之间的关系构成了一张巨大的网络,就像下面这张图: 那么在电脑中,我们 […]...

展开目录

目录导航