Python-类的其他成员反射
Posted we我们
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-类的其他成员反射相关的知识,希望对你有一定的参考价值。
实例方法:
依赖对象,不需要装饰器装饰,方法的参数是self
@classmethod:依赖类,被classmethod装饰器装饰的方法,参数是cls
class A:
def func(self): # 实例方法
print("is A func")
a = A() # 实例化一个对象(实例)
A.func(12) # 类调用需要添加一个参数
a.func() # 对象调用不需要传参
?
class A(object):
静态方法:
@staticmethod:不依赖类和对象 就是一个普通的函数
import time
class TimeTest(object):
def __init__(self,hour,minute,second):
self.hour = hour
self.minute = minute
self.second = second
属性:
元类
python大部分自带的类和自己定义的类都是由type类实例出来的
type 查看数据类(能够查看出当前内容从属于哪个类)
python中一切皆对象
issubclass() 判断参数1是不是参数2的子类
isinstance() 判断参数1是不是参数2的对象
object和type的关系:
object是type的对象
print(isinstance(object,type))
type是object的子类
print(issubclass(type,object))
反射
通过字符串操作对象的属性和方法
1.对象的角度使用反射
class A:
def __init__(self,name):
self.name = name
def func(self):
print("is func")
a = A("laoda")
print(hasattr(a,"name")) # 返回bool值True就说明name这个属性在对象中存在
print(getattr(a,"name")) # laoda
f = getattr(a,"func")
f()
print(getattr(a,"age",None)) # 没有这个属性就返回None
getattr获取的是类中的方法时,获取的是函数地址,获取静态属性时获取的是本身
2.类的角度使用反射
class A:
def __init__(self,name):
self.name = name
def func(self):
print("is func")
a = A("laoda")
print(hasattr(A,"name")) # False
f = getattr(A,"func")
f(11) # 类调用函数要加参数,而对象调用不用加
setattr(A,"age",18)
print(A.__dict__)
3.当前模块使用反射
def foo():
print("is foo")
f = globals()["foo"]
f()
?
import sys
o = sys.modules[__name__] # 获取当前模块名对应的对象
f = getattr(o,"foo")
f()
4.其他模块使用反射
import test
o = globals()["test"]
f = getattr(o,"func")
f()
模块部分使用反射的方式:
-
方法一:
import sys
sys.modules[__name__]
-
方法二:
globals()[__name__]
hasattr(对象,字符串)
getattr(对象,字符串,查找不到的返回值)
setattr(对象,字符串,值)
delattr(对象,字符串)
反射的应用
if hasattr():
getattr()
以上是关于Python-类的其他成员反射的主要内容,如果未能解决你的问题,请参考以下文章