您的当前位置:首页正文

python进阶之面向对象ss

2024-11-29 来源:个人技术集锦

大家一起进步吧!感谢大家的支持和关注


  • python环境安装
  • ptython基础
  • 面向对象s

补充

继承方式

继承关系 :
print(类名.mro())

class D(object):
    pass


class C(D):
    pass


class B(D):
    pass


class A(B, C):
    pass

print(A.mro())

A  B C D  object

自己分析一下吧

内置函数

  • callable,是否可在后面加括号执行。

    • 函数

      def func():
          pass
      
      print( callable(func) ) # True
      
    • class Foo(object):
          pass
      
      print( callable(Foo) ) # True
      
    • 类中具有__call__方法的对象

      class Foo(object):
      	pass
      
      obj = Foo()
      print( callable(obj) ) # False
      
      class Foo(object):
      
          def __call__(self, *args, **kwargs):
              pass
          
      obj = Foo()
      print( callable(obj) ) # True
      
  • super,按照mro继承关系向上找成员。

  • type,获取一个对象的类型。

  • isinstance,判断对象是否是某个类或其子类的实例

class Top(object):
    pass


class Base(Top):
    pass


class Foo(Base):
    pass


v1 = Foo()

print( isinstance(v1, Foo) )   # True,对象v1是Foo类的实例
print( isinstance(v1, Base) )  # True,对象v1的Base子类的实例。
print( isinstance(v1, Top) )   # True,对象v1的Top子类的实例。

  • issubclass,判断类是否是某个类的子孙类
class Top(object):
    pass


class Base(Top):
    pass


class Foo(Base):
    pass


print(issubclass(Foo, Base))  # True
print(issubclass(Foo, Top))   # True

异常处理

异常处理的基本格式:

try:
    # 逻辑代码
except Exception as e:
    # try中的代码如果有异常,则此代码块中的代码会执行。
try:
    # 逻辑代码
except Exception as e:
    # try中的代码如果有异常,则此代码块中的代码会执行。
finally:
    # try中的代码无论是否报错,finally中的代码都会执行,一般用于释放资源。

print("end")

"""
try:
    file_object = open("xxx.log")
    # ....
except Exception as e:
    # 异常处理
finally:
    file_object.close()  # try中没异常,最后执行finally关闭文件;try有异常,执行except中的逻辑,最后再执行finally关闭文件。
"""    

自定义异常&抛出异常

自定义的异常,如果想要触发,则需要使用:raise MyException()类实现

class MyException(Exception):
   pass


try:
   # 。。。
   raise MyException()
   # 。。。
except MyException as e:
   print("MyException异常被触发了", e)
except Exception as e:
   print("Exception", e)

特殊的finally

'''
try:
    # 逻辑代码
except Exception as e:
    # try中的代码如果有异常,则此代码块中的代码会执行。
finally:
    # try中的代码无论是否报错,finally中的代码都会执行,一般用于释放资源。

print("end")
'''

def func():
    try:
        return "返回了也要执行finally"
    except Exception as e:
        pass
    finally:
        print("得过我这关")
        
func()

在try或except中即使定义了return,也会执行最后的finally块中的代码

反射

以字符串的形式去 对象 中进行成员的操作

# 以前
# 对象.成员
# 创建新得对象变量
# 对象.成员 = "xxx"
# 删除
# del 对象.成员
# 反射怎么用

Python中提供了4个内置函数来支持反射:

  • getattr,去对象中获取成员

    v1 = getattr(对象,"成员名称")
    v2 = getattr(对象,"成员名称", 不存在时的默认值)
    
  • setattr,去对象中设置成员

    setattr(对象,"成员名称",值)
    
  • hasattr,对象中是否包含成员

    v1 = hasattr(对象,"成员名称") # True/False
    
  • delattr,删除对象中的成员

    delattr(对象,"成员名称")
    

python中一切皆对象

每个对象的内部都有自己维护的成员

import_module + 反射

在Python中如果想要导入一个模块,可以通过import语法导入;企业也可以通过字符串的形式导入。
import_module只能导入到模块级别。

# 导入模块

# import random
# from requests import exceptions as m
# from requests.exceptions import InvalidURL
# v1 = random.randint(10,100)

#  反射实现导模块
from importlib import import_module
m = import_module("random")
m = import_module("requests.exceptions")
# m = import_module("requests.exceptions.InvalidURL") # 报错,import_module只能导入到模块级别。
v1 = m.randint(10,100)
cls = m.InvalidURL


恭喜你

  • python体系的语法结束

显示全文