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)