普通方法: 没有参数,只能类调用
绑定方法: (1)绑定到对象(自动传递对象参数) (2)绑定到类(自动传递参数)
静态方法: 不管是类仍是对象,都能调用的方法
#例:
class Dog():
def __init__(self,name):
self.name = name
#普通方法
def jiao():
print("小狗会叫")
#绑定到对象方法
def tian(self):
print("小狗喜欢舔骨头")
#绑定到类方法
@classmethod
def chi(cls):
print(cls)
print("小狗喜欢吃肉")
#静态方法
@staticmethod
def jump():
print("小狗喜欢跳起来接飞盘")
#实例化对象
obj = Dog("小黑")函数
Dog.jiao()
#对象没法调用,只能用类.方法spa
obj.tian()
#Dog.tian(123) #若是硬要使用类来调用,知足实参一一对应(随机加个值)对象
Dog.chi()
# 用对象调用绑定到类的方法是能够的
# 先找出该对象所归属的类是谁,而后再传递这个类
obj.chi()继承
obj.jump()
Dog.jump()文档
#例:字符串
class Human():
pass
class Man():
pass
class Woman():
passget
class Children(Man, Woman):
'''
类的功能: 描述一个小孩
类的成员属性: eye
类的成员方法: sleep __beat_doudou
'''
eye = "蓝色的眼睛"
#普通方法
def eat():
print("小孩须要多吃有养分的东西")
#绑定方法
def sleep(self):
print("小孩喜欢睡觉")
def drink(self):
print("小孩要常常喝水")
def cry(self, func):
res = func.__name__
print(res, type(res))
#私有绑定方法
def __beat_doudou(self):
print("小孩喜欢打豆豆")
#__dict__ 获取对象或类的内部成员结构
obj = Children()
res = obj.__dict__
# __dict__ 归属是类的.全部用对象是没有办法查看类的内部成员结构的
print(res) #因此res为空
print(Children.__dict__)
# __doc__ 获取对象或类的内部文档
res = Children.__doc__
print(res)
'''
输出结果:
类的功能: 描述一个小孩
类的成员属性: eye
类的成员方法: sleep __beat_doudou
'''
# __name__ 获取类名函数名
def myfunc():
print("我是函数")
obj.cry(myfunc) # myfunc <class 'str'>
# __class__ 获取当前对象所属的类
res = obj.__class__
print(res) #<class '__main__.Children'>
# __bases__ 获取一个类直接继承的全部父类,返回元组
res = Children.__bases__
print(res)input
概念:经过字符串去操做类对象 或者 模块中的属性方法
(1)类中的反射
hasattr() 检测对象/类是否有指定的成员
getattr() 获取对象/类成员的值
setattr() 设置对象/类成员的值
delattr() 删除对象/类成员的值it
(2)模块的反射
sys.modules 返回一个系统字典,字典的键是加载的全部模块class
# (1)hasattr() 检测对象/类是否有指定的成员 [以是否可以自动调用为基准]
#用的是二中的obj
res = hasattr(obj, "eye")
print(res)
res = hasattr(Children, "eat")
print(res) # 返回True说明存在
# (2)getattr() 获取对象/类成员的值
res = getattr(obj, "eye")
print(res) # 蓝色的眼睛
res = getattr(obj, "sleep")
print(res) # 它返回的是一个绑定方法
res() # 小孩喜欢睡觉
# 类的方式
res = getattr(Children, "eat")
print(res)
res() # 小孩须要多吃有养分的东西
res = getattr(Children, "sleep")
print(res) # 它不是一个绑定方法,全部必定须要用类的方式
res(1)
#(3)getattr 第三个参数可选若是获取不到这个值,能够添加默认提示,预防报错
res = getattr(obj, "abc", "对不起这个真没有")
print(res)
# strvar = input("请输入您要调用的函数:")
# if hasattr(obj,strvar):
# res = getattr(obj,strvar)
# res()
# (3)setattr() 设置对象/类成员的值
setattr(obj, "hair", "黑色")
print(obj.hair)
setattr(Children, "skin", "绿色")
print(Children.skin)
# (4)delattr() 删除对象/类成员的值
delattr(obj, "hair")
# print(obj.hair)
delattr(Children, "skin")
# print(Children.skin)
#sys.modules 返回一个系统字典,字典的键是加载的全部模块
#例3:import sysres = sys.modulesprint(res)print(__name__) # __main__ 是不是主文件运行mymodule = sys.modules[__name__]print(mymodule) #打印主模块def func1(): print("这是func1方法")def func2(): print("这是func2方法")def func3(): print("这是func3方法")# 用户给我字符串,我反射对应的方法调用while True: strvar = input("请输入您要调用的方法:") if hasattr(mymodule, strvar): _func_ = getattr(mymodule, strvar) _func_() # 注意这个函数会继承您输入的函数, # 全部若是输入_myfunc会打印上一个函数的内容,全部这个函数名取得特殊一点 else: print("大哥,没有")