Python学习,元类type 反射 函数与方法 双下方法

本文详细介绍了Python中的元类`type`,它是如何用于创建类的。接着探讨了反射的概念,包括如何通过字符串操作对象,并提供了相关练习。接着区分了函数和方法的不同,强调在Python中一切都是对象。最后,讲解了一些特殊的双下划线方法,如`__len__`、`__hash__`等,以及它们在Python中的作用。
摘要由CSDN通过智能技术生成

1.元类type

type 获取对象从属于的类

python 中 一切皆对象, 类在某种意义上也是一个对象, python中自己定义的类, 以及大部分内置类, 都是由type元类(构建类)实例化得来的

type 与 object 的关系

print(type(object)) 
object类是type类的一个实例
object类是type类的父类

2.反射

程序对自己内部代码的一种自省方式

反射是什么

通过字符串去操作对象的方式

具体方法

hasattr
getattr
setattr
delattr

反射角度

实例对象

# obj = A('赵海狗',47)
class A:
    country = "中国"
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def func(self):
        print("in A func")

obj = A("赵海狗", 47)

print(hasattr(obj,"name"))
print(hasattr(obj,"country"))
print(hasattr(obj,"func"))

print(getattr(obj,"name"))
print(getattr(obj,"country"))
f = getattr(obj,"func")
f()
print(getattr(obj, "sex", None))

obj.sex = "公"
setattr(obj, "sex", "公")
print(obj.__dict__)

delattr(obj,"name")
print(obj.__dict__)

class A:
    country = "中国"
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def func(self):
        print(self)
        print("in A func")

if hasattr(A,"country"):
    print(getattr(A, "country"))
if hasattr(A, "func"):
    obj = A("赵海狗", 26)
    getattr(obj, "func")()
    # 和下方方法一样 区别在于一个对象反射,一个类反射,一个不用传参, 一个需要传参
    getattr(A, "func")(obj)

本模块

a = 666
def func1():
    print("in 本模块这个对象")

import sys
print(sys.modules[__name__])
print(getattr(sys.modules[__name__], "a"))
getattr(sys.modules[__name__], "func1")()

练习题

1.使用反射依次调用所有函数

def func1():
    print("in func1")
def func2():
    print("in func2")
def func3():
    print("in func3")
def func4()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值