python全栈学习--面向对象进阶2

内置函数

isinstance()    #对象     类
issubclass()    #子类    父类

#反射:使用字符串数据类型的变量名来使用变量

#文件中存储的都是字符串

#网络上能传递的也最接近字符串

#用户输入的

# hash是加速寻址
print(hash('str'))
print(hash('str'))

hash之后的数字,就是内存地址

hash之后,将value存储在对应的内存地址中

字典占用的内存相对的比较多

用空间换时间

list 占用的内存比较少,但是没有字典快

#示例:在类中,所有对象,默认打印的是内存地址
class List:
    def __init__(self,*args):
        self.l = list(args)
l = List(1,2,3,4,5)
print(l)

 执行输出:

 反射:

使用字符串数据的变量名来使用变量

wwwh 即 what,where,why,how 这4点是一种学习方法

反射:

使用字符串数据类型的变量名来使用变量

1.文件中存储的都是字符串

2.网络上能传递的也最接近字符串

3.用户输入的也是字符串

上面3种情况都是字符串,如果这有这种情况的,需要操作类或者模块时,就需要用到反射

有4种应用

类调用静态属性

对象调用属性模块中的名字

调用自己模块中的名字

a = 1
import sys

b = getattr(sys.modules['__main__'], 'a')
print(b)  # 输出变量a的值,即1

def func(): print('11')

c = getattr(sys.modules['__main__'], 'func')
print(c)  # 输出func的内存地址
getattr(sys.modules['__main__'], 'func')()  # 执行方法,输出11main__'],'func')()

 

Teacher 类 wahaha方法的连续反射

import sys
class Teacher():
    def wahaha(self):print('wa')
alex = getattr(sys.modules['__main__'],'Teacher')() #获取当前模块的Teacher,并执行
print(alex)   #Teacher类的内存地址
getattr(alex,'wahaha')()#执行方法wahaha

执行后输出:

反射静态方法:

import sys
class Teacher(object):
    @staticmethod
    def wahaha():print('wa')
Teacher = getattr(sys.modules['__main__'],'Teacher')  #获取当前模块的Teacher类
getattr(Teacher,'wahaha')()    #执行类方法,注意加括号

  

找对象import sys

class Teacher(object):
   # def wahaha(self):print('wa') @staticmethod def qqxing():print('qq') alex = Teacher() b = getattr(sys.modules['__main__'],'alex') print(b)

  

 

class Student:
    def cls001(self):print('班级一')
    @staticmethod
    def cls002():print('班级二')
#1.通过类调用静态属性
if hasattr(Student,'cls001'): #判断Student方法在中cls01是否存在
    print(getattr(Student,'cls001'))
a = Student
Student.cls002()

 

 

 

  

  

原文地址:https://www.cnblogs.com/haowen980/p/8884812.html