首页 > 编程语言 >Python面向对象的理解

Python面向对象的理解

时间:2024-04-05 14:56:25浏览次数:19  
标签:__ index slice Python self 面向对象 理解 print def

★ 静态方法、实例方法、类方法

项目 操作对象 调用方式
静态方法 既不操作类也不操作实例对象 类或实例对象
实例方法 操作实例属性 实例对象
类方法 操作类属性 类或实例对象

★ python私有方法和私有属性理解

  • 规律总结
    1.私有的属性,不能通过对象直接访问,但是可以通过方法访问; 本质是私有属性名被重整(在私有属性名前追加"_类名",而使用方法访问时会自动补全这个前缀)
    2.私有的方法,不能通过对象直接访问(私有方法名重整)
    3.私有的属性、方法,不会被子类继承,也不能被直接访问
    
    
  • 说明
    1.私有化本质上就是名字重整
    2.一般情况下,私有的属性、方法都是不对外公布的,往往用来做内部的事情,起到安全的作用; 如果子类需要用到父类的私有属性和方法, 可以在父类中定义公有方法,在子类中间接的访问父类的私有方法、属性
    

★ 类的常见魔法方法

  • __doc__ 类的描述信息
    class Foo:
      """ 描述类信息,这是用于看片的神器 """
    
      def func(self):
        pass
    
    
      print(Foo.__doc__)
    
    """
    <程序执行结果>:
        描述类信息,这是用于看片的神器
    """
    
  • __module__ 当前操作的对象在那个模块
  • __class__ 当前操作的对象在那个模块
    from test import Person
    
    obj = Person()
    print(obj.__module__)  
    print(obj.__class__)
    
    """
    <程序执行结果>:
    test
    <class 'test.Person'>
    """
    
  • __del__ 当对象在内存中被释放时自动触发执行
    class Foo:
    
        def __del__(self):
            print(f"{self} 对象被删除")
    
    
    f1 = Foo()
    del f1
    
    """
    <程序执行结果>:
    <__main__.Foo object at 0x7f96e8125d90> 对象被删除
    """
    
  • __init__ 初始化对象时触发执行
  • __call__ 对象后面加括号时触发执行
    class Foo:
    
        def __init__(self):
            print('__init__ 被调用')
    
        def __call__(self, *args, **kwargs):
            print('__call__ 被调用')
    
    
    f1 = Foo()
    print("--------------")
    f1()
    
    """
    <程序执行结果>:
    __init__ 被调用
    --------------
    __call__ 被调用
    """
    
  • __dict__ 查看对象的属性时触发执行
    class Foo:
    
        COUNT = 0
    
        def __init__(self, name):
            self.name = name
    
        def say_hello(self):
            print(f"hello {self.name} ")
    
    
    f1 = Foo("demo")
    # 获取对象f1的所有属性
    print(f1.__dict__)
    # 获取对象f1类的所有属性
    print(f1.__class__.__dict__)
    """
    <程序执行结果>:
    {'name': 'demo'}
    {'__module__': '__main__', 'COUNT': 0, '__init__': <function Foo.__init__ at 0x7ff3c00e5c20>, 
    'say_hello': <function Foo.say_hello at 0x7ff3e00ca440>, '__dict__': <attribute '__dict__' of 'Foo' objects>, 
    '__weakref__': <attribute '__weakref__' of 'Foo' objects>, '__doc__': None}
    """
    
  • __str__ 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。
    class Foo1:
        pass
    
    
    class Foo2:
    
        def __str__(self):
            return 'Foo2'
    
    
    f1 = Foo1()
    f2 = Foo2()
    print(f1)
    print(f2)
    
    """
    <程序执行结果>:
    <__main__.Foo1 object at 0x7fe2b000f2d0>
    Foo2
    """
    
  • __xxitem__ 对象索引操作
    class Foo(object):
    
        def __getitem__(self, key):
            print('__getitem__', key)
    
        def __setitem__(self, key, value):
            print('__setitem__', key, value)
    
        def __delitem__(self, key):
            print('__delitem__', key)
    
    
    obj = Foo()
    
    # 对象获取操作,触发 __getitem__
    result = obj['k1']
    # 对象设置操作,触发 __setitem__
    obj['k2'] = 'laowang'
    # 对象删除操作,触发 __delitem__
    del obj['k1']
    
    """
    <程序执行结果>:
    __getitem__ k1
    __setitem__ k2 laowang
    __delitem__ k1
    """
    
  • slice 对象切片操作
    """
    Python3 的官方文档可知,Python3中的切片的魔术方法不再是Python2中的getslice(), setslice()和delslice(),而是借助 slice 类整合到了getitem(),setitem()和 delitem()中。
    """
    
    class Foo(object):
        def __getitem__(self, index):
            if isinstance(index, slice):
                print(f"【slice-get】>> start: {index.start}, stop: {index.stop}, step: {index.step}")
    
        def __setitem__(self, index, value):
            if isinstance(index, slice):
                print(f"【slice-set】>> start: {index.start}, stop: {index.stop}, step: {index.step}")
                print(f"【slice-set】>> The value is:", value)
    
        def __delitem__(self, index):
            if isinstance(index, slice):
                print(f"【slice-del】>> start: {index.start}, stop: {index.stop}, step: {index.step}")
    
    
    obj = Foo()
    
    # 对象切片获取操作
    obj[-1:1]
    # 对象切片修改操作
    obj[-1:10:1] = [11, 22, 33, 44]
    # 对象切片删除操作
    del obj[-1:10:2]
    
    """
    <程序执行结果>:
    【slice-get】>> start: -1, stop: 1, step: None
    【slice-set】>> start: -1, stop: 10, step: 1
    【slice-set】>> The value is: [11, 22, 33, 44]
    【slice-del】>> start: -1, stop: 10, step: 2
    """
    

标签:__,index,slice,Python,self,面向对象,理解,print,def
From: https://www.cnblogs.com/cs-songbai/p/18115756

相关文章

  • ssm基于面向对象的学生事务处理系统分析与设计论文
    摘要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本学生事务处理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理......
  • 二叉树计算【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-二叉树计算给出一个二叉树如下图所示:6/79\/-26请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。20(7-2+9+6)/\-26\/......
  • 学生重新排队【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-学生重新排队n个学生排成一排,学生编号分别是1到n,n为3的整倍数。老师随机抽签决定将所有学生分成m个3人的小组,n=3*m为了便于同组学生交流,老师决定将小组成员安排到一起,也就是同组成员彼此相连,同组任意两个成员输入描述:之间无其它组的成员。因此老师决定调整队伍,......
  • python学习笔记——函数
     2. 函数****2.1. 定义****一段可以被另外一段代码执行的程序2.2. 语法****def函数名():函数体--语法return需要的返回值2.3. 调用****函数名()#定义函数*deftest_function():print('我是一个测试函数')#调用函数*ifname=='main':test_functi......
  • 面向对象入门
    开发一个一个的对象,把数据交给对象,再调用对象的方法来完成对数据的处理。1.面向对象的好处?****符合人类的思维习惯,编程更简单,更直观。2.程序中的对象是什么?****对象本质上是一种特殊的数据结构对象类似于一张张有模板的表,是在表中填写的数据3.对象是怎么出来的?****通过cla......
  • Python企业面试题2 —— 基础篇
    1.re的match和search区别?re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。re.search扫描整个字符串并返回第一个匹配成功的值。2.什么是正则的贪婪匹配?匹配一个字符串没有节制,能匹配多少就去匹配多少,直到没有匹配的为止。......
  • 学python的第七天
    python中的数据结构python中有四种数据结构,列表,字典,元组,集合列表(list):list=[val1,val2,val3,val4]字典(dict):dict={key1:val1,key2:val2}元组(tuple):tuple=(val1,val2,val3,val4)集合(set):set={val1,val2,val3,val4}1,列表#1,列表#列表中的每一个元素都是可变......
  • 学python的第八天
    补充前面某天学的函数,函数具有函数名,参数,返回值,作用域:当前模块,函数中定义:嵌套函数,类中定义:方法语法格式def函数名(形式参数列表):函数体return返回值#如果没有数据返回值,则可以省略return语句# 1,变量函数中变量的作用域,可以在模块中创建,作用域......
  • 使用Python写简单的点云SUSAN关键点检测
    一、代码Pythonimportnumpyasnpimportopen3daso3dfromscipy.spatialimportcKDTreefromjoblibimportParallel,delayeddefcalculate_response(idx,points,radius,t,kdtree):#使用KD树找到半径内的所有点neighbor_indices=kdtree.query_ba......
  • 归并排序 返回逆序数 python
    defmerge_sort_and_count_inversions(arr):n=len(arr)ifn<=1:returnarr,0#如果n小于等于1,数组已经有序,直接返回数组本身和逆序数0mid=n//2left_lst,inv_left=merge_sort_and_count_inversions(arr[:mid])#对左半部分进行递......