class A: def func1(self):pass #对象与方法之间的绑定 def func4(self):pass #对象与方法之间的绑定 @classmethod def func2(cls):pass #类与方法之间的绑定 @staticmethod def func3():pass
print(A.func1)
print(a.func1)
print(b.func1)

类方法 由于不适用于对象内存空间中的属性,所以不会将对象和方法绑在一起
而是将类和方法绑在一起
python处处皆对象
class B:
pass
b1 = B()
b2 = b1
print(b1)

二,内置函数
class B:pass class C(B):pass class D(C):pass print(issubclass(C,D)) print(issubclass(D,C)) print(issubclass(B,C)) print(issubclass(C,B)) print(issubclass(D,B))
# issubclass(子类名,父类名) 如果返回True,说明有继承关系
三,反射
# role = 123
# print(eval('role'))
# class A:
# role = 'Person'
# def func(self):
# print('*'*self)
# # ret = input('>>>')
# # print(A.__dict__[ret])
# # getattr
# print(getattr(A,'role')) # 从A的命名空间里找一个属性 ,直接就可以找到这个属性的值
# f = getattr(A,'func');f(1) # 从A的命名空间里找一个方法 ,找到的是这个方法的内存地址
# getattr(A,'func')(1)

反射
正常情况下如果可以拿到这个变量 那么如有有这个变量的字符串形式 就是用反射可以获取到这个值
使用字符串数据类型的变量名 访问一个命名空间中的名字
找一个属性,直接就可以找到这个属性的值
找一个方法,找到的是这个方法的内存地址
hasattr() 判断一个命名空间中有没有这个名字
getattr() 从命名空间中获取这个名字对应的值
类中的反射
类可以获取类中的属性和方法
class A:
role = 'Person'
def func(self):
print('*'*self)
print(hasattr(A,'r'))
print(hasattr(A,'role'))
print(hasattr(A,'func'))
执行输出:

class A:
role = 'Person'
def func(self):
print('*'*self)
print(hasattr(A,'r'))
print(hasattr(A,'role'))
print(hasattr(A,'func'))
ret = input('>>>')
if hasattr(A,ret):
print(getattr(A,ret)) # getattr从A的命名空间里找一个属性 ,属性不存在会报错
else:
print('filed')

class A:
role = 'Person'
def __init__(self):
self.money = 500
def func(self):
print('*'*10)
a = A()
print(a.func)
getattr(a,'func')()

import os
os.rename('userinfo','user')
getattr(os,'rename')('user','user_info')
# 类使用类命名空间中的名字
# 对象使用对象能用的方法和属性
# 模块使用模块中的名字
# import os ; getattr(os,'rename')('user','user_info')
# 从自己所在的模块中使用自己名字
import sys # 和python解释器相关的内容都在sys里
print(sys.modules['__main__'])
func = input('>>>')
if hasattr(sys.modules['__main__'],func):
getattr(sys.modules['__main__'],func)
类使用命名空间中的名字
getattr(类名,'名字')
对象使用对象能用的方法和属性
getattr(对象名,’名字‘)
模块使用模块中的名字
导入模块
getattr(模块名,'名字')
import os ; getattr(os,'renama')('user','user_info')
从自己所在的模块中使用自己名字
import sys
getattr(sys.modules['__main__'],名字)
getattr 一定要和hasattr配合使用
反射 4个内置函数
getattr ******
hasattr ******
setattr #修改和新建 **
delattr #删除一个属性 *
#增删改 对象属性
#增删改 对象属性
class A:
def __init__(self,name):
self.name = name
def wahaha(self):
print('wahahahaha')
a = A('alex')
# a.name
a.wahaha()
print(a.__dict__)
setattr(a,'age',18)
print(a.__dict__)

#增删改 对象属性
class A:
def __init__(self,name):
self.name = name
def wahaha(self):
print('wahahahaha')
a = A('alex')
# a.name
a.wahaha()
print(a.__dict__)
setattr(a,'age',18)
print(a.__dict__)
setattr(a,'name','egon') ####给a对象添加一个属性
print(a.__dict__)

#增删改 对象属性
class A:
def __init__(self,name):
self.name = name
def wahaha(self):
print('wahahahaha')
a = A('alex')
# a.name
a.wahaha()
print(a.__dict__)
setattr(a,'age',18)
print(a.__dict__)
setattr(a,'name','egon') ####给a对象添加一个属性
print(a.__dict__)
#del a.age
delattr(a,'age')
print(a.__dict__)

