day27 反射
# 复习:
# class 类名(父类1, 父类2):
#     静态属性 = ''  # 静态属性,类属性
#
#     def __init__(self):  # 初始化方法
#         pass
#
#     def func(self):  # 动态属性,方法
#         pass
# 对象=类名()
# 对象.方法名()
# 对象.属性名
# 对象.函数名()
# 组合:是么是什么的关系
# 一个类的属性,是另一个类的对象
# class Teacher:
#     pass
#
#
# class Course:
#     def __init__(self, name, price, period):
#         self.name = name
#         self.price = price
#         self.period = period
#
#
# python = Course("python", 19800, '6 months')
#
#
# class Classes:
#     def __init__(self, name, course):
#         self.name = name
#         self.course = course
#
#
# pys9 = Classes('python_s9', python)
# print(pys9.course.name)  # 一个类的属性,是另一个类的对象
# python.name = 'python全栈'
# print(pys9.course.name)
#面向对象的三大特性:继承、多态、封装
    #继承:
        #单继承:
            #父类 (超类、基类)
            #子类(派生类):派生方法与属性
            #特性:先找自己的,没有再找父类的
        #多继承(面试)
            #不超过三个父类,不超过三层
            #先找自己的,没有再找最近的父类的方法
            #接口类和抽象类(不重要)
            #经典类(深度优先)与新式类(广度优先)(面试)
            #super只能在python3中使用 mro
                #super是根据mro广度优先顺序找上一个类
#多态(面试)
    #多态和鸭子类型
# 封装 ***(面试)
    #私有的
    #__名字
    #只能在类的内部使用,子类无法继承
#三个装饰器
    # @property **** 规范 面试
    # @staticmethod ***
    # @classmethod
# 内置函数:isinstance issubclass
# class A:
#     pass
# class B(A):
#     pass
# a = A()
# print(isinstance(a,A))
# print(issubclass(B,A))
#反射:就是用字符串去操作变量
    #方法:hasattr,getattr,setattr,delattr
# class A:
#     def func(self):
        # print('in func')
# a = A()
# a.name = 'alex'
# a.age = 63
#反射对象的属性
# ret = getattr(a,'name') #通过变量名的字符串取到值
# print(ret)
# 变量名 = input('>>>') #func
# print(getattr(a,变量名))
# print(a.__dict__[变量名])
#反射对象的方法
# a.func()
# ret = getattr(a,'func')()
class A:
    price = 20
    @classmethod
    def func(cls):
        print('in func')
#反射类的属性
# A.price
# print(getattr(A,'price'))
# 反射类的方法 :classmethod staticmethod
#A.func()
#if hasattr(A,'func'): 夫妻档
#    getattr(A,'func')() 夫妻档
#模块
# import my
# print(my.day)
# print(getattr(my,'day'))
# #反射模块的方法
# getattr(my,'wahaha')()
#内置模块
# import time
# print(getattr(time,'time')())
# print(getattr(time,'asctime')())
#内置的类方法与内置函数之间有着紧密的关联
#双下方法
#obj.__str__ = str(obj)
# obj.__repr__ = repr(obj)
class Teacher:
    def __init__(self,name,salary):
        self.name = name
        self.salary = salary
    def __str__(self):
        return "Teacher's object :%s"%self.name
    def __repr__(self):
        return str(self.__dict__)
    def func(self):
        return 'wahaha'
nezha = Teacher("娜扎",250)
print(nezha) #打印一个对象就是调用a.__str__
print(repr(nezha))
print('>>>%r'%nezha)
# a.__str__ --> object
# object里有一个__str__,一旦被调用,就返回这个方法的对象的内存地址
l = [1,2,3,4,5]#实例化一个列表类的对象
print(l)
                    
                
                
            
        
浙公网安备 33010602011771号