复习

class 类名(父类,父类2):
静态属性 = '' #静态属性 类属性
def __init__(self): #初始化方法
self.name = 'alex'
def func(self):
print(self,age) #动态属性 方法
对象 = 类名()
对象.方法名()
对象.属性名
对象.name
对象.age = 18
对象.func()
组合:表达的是什么有什么 *****
一个类的属性是另外一个类的对象
命名空间:类和对象分别存在不同的命名空间中
面向对象的三大特性:继承、多态、封装
继承:单继承 :****
父类(超类、基类)
子类(派生类):派生方法和派生属性,
子类的对象在调用方法和属性:先用自己的,自己没有才用父类的
多继承:***(面试)
不会超过三个父类,不要超过三层 ***
如果子类自己有用自己的,如果没有就用离子类最近的那个父类的方法
抽象类和接口类**
经典类和新式类:继承规则不同,深度优先和广度优先 *****(面试)
super 只能在python3中使用 ****
super是根据mro广度优先顺序找上一个类
多态 ***:(面试)
多态和鸭子类
封装:(面试)
私有的 __名字
只能在类的内部调用,子类都无法继承
三个装饰器
@property ****
@staticmethod ***
@classmethod *****当一个方法只使用了类的静态变量时,就给这个方法加上@classmethod装饰器,默认传cls参数

'''
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,teacher,school):
self.name = name
self.course = course
self.teacher = teacher
self.school = school
pys9 = Classes('pytho_s9',python,'tim','oldboy')
print(pys9.course.name)
python.name = 'python全栈'
print(pys9.course.name)
# isinstance和issubclass
# isinstance(obj,cls)检查是否obj是否是类 cls 的对象
# class A:
# pass
# a = A()
# print(isinstance(a,A))
# issubclass(sub, super)检查sub类是否是 super 类的派生类
# class A:
# pass
# class B(A):pass
# a = A()
# print(issubclass(B,A))
# 反射:是用字符串类型的名字去操作变量
# 反射就没有安全问题
# 反射对象中的属性和方法 hasattr getattr setattr delatter
# class A:
# def func(self):
# print('in func')
# a = A()
# a.name = 'alex'
# a.age = 64
# 反射对象的属性
# ret = getattr(a,'name') #通过变量名的字符串形式取到的值
# get = input('>>>>>>')
# print(getattr(a,get))
# print(a.__dict__[get])
# 反射对象里的方法
# ret = getattr(a,'func')
# ret()

class A:
price = 20
def func(self):
print('in func') # 反射类的属性
print(getattr(A,'price'))
# 反射类的方法:classmethod  staticmethod
# 类名.方法名
class A:
price = 20
@classmethod
def func(cls):
print('in func')
print(getattr(A,'func'))
ret = getattr(A,'func')
ret()
# 模块
# 反射模块的属性
import my
# print(my.day)
print(getattr(my,'day')) # 反射模块的方法
ret = getattr(my,'wahaha')
ret()
# 反射自己的模块中的变量
# year = 2019
# import sys
# print(sys.modules['__main__'])
# def qqxing():
# print('qqxing')
# print(getattr(sys.modules['__main__'],'year')) # 反射自己模块中的方法或函数
# print(getattr(sys.modules['__main__'],'qqxing'))
# ret = getattr(sys.modules['__main__'],'qqxing')
# ret()
#
# get = input('>>>>>>> ')
# print(getattr(sys.modules['__main__'],get))
# print(getattr(sys.modules[__name__],get))
# 一个模块中的类能不能反射的到
# import my
# print(getattr(my,'C')())
# if hasattr(my,'name'):
# getattr(my,'name')
# setattr() 设置修改变量
class A:
pass
a = A()
setattr(A,'name','tim')
setattr(a,'name','gim')
print(A.name)
print(a.name)
# delattr()删除一个变量
delattr(a,'name')
print(a.name)
# obj.__str__

# 内置的类方法和内置的函数之间有着千丝万缕的联系
class Teacher:
def __init__(self,name,salary):
self.name = name
self.salary = salary
def __str__(self):
return "Teacher's object : %s"%self.name
# a = A()
nezha = Teacher('哪吒',250)
print(nezha)
# print(a) #打印一个对象的时候,就是调用a.__str__
# object 有个双下str,一旦被调用,就返回调用这个方法的内存地址
# print('%s:%s'%('A',a)) #%s str() 直接打印 实际上都是走__str__
Teacher's object : 哪吒
# %s str()  直接打印  实际都是走__str__
# %r repr() 直接打印 实际都是走__repr__ repr是str的备胎,反过来不行
# obj.__repr__
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__)
# a = A()
nezha = Teacher('哪吒',250)
print(nezha)
print(repr(nezha))
print('>>>>>%r'%nezha)
# %s str()  直接打印  实际都是走__str__
# %r repr() 直接打印 实际都是走__repr__ repr是str的备胎,反过来不行(str不能做repr的备胎)
#str(obj)的时候,实际上是内部调用了obj.__str__方法,如果str方法有返回值,那么他返回的必定是一个字符串
#如果没有__str__方法,会先找本类中的__repr__方法,在没有再找父类中的__str__
# __del__
class A:
def __del__(self):
print('执行我拉')
a = A()
del a #del 既执行了这个方法,又删除了变量,
print(a)
# __call__
class A:
def __init__(self,name):
pass
def __call__(self):
print('执行我了')
a = A('tim')
a() #相当于执行了__call__方法
												

Python9-反射-day27(大年初三)的更多相关文章

  1. day27:异常&反射

    目录 认识异常处理 1.程序错误的种类    2.异常的分类 3.AssertionError(断言assert语句失败) 异常处理的基本语法 1.异常处理的基本语法 2.带有分支的异常处理 3.处理 ...

  2. day27:反射和双下方法

    1, # 面向对象的三大特性:继承,多态和封装 # 继承: # 单继承: **** # 父类(超类,基类) # 子类(派生类) 派生方法和派生属性 # 子类的对象在调用方法和属性:先用自己的,自己没有 ...

  3. day27(反射之内省机制)

    内省 内省:底层是使用反射机制实现的,是对于反射的进一步封装. 反射:通过类名来获取类中的所有属性和方法及类中的所有隐藏的方法. 内省:通过一个标准类(javabean类)来获取bean中的字段.ge ...

  4. day27<反射&JDK5新特性>

    反射(类的加载概述和加载时机) 反射(类加载器的概述和分类) 反射(反射概述) 反射(Class.forName()读取配置文件举例) 反射(通过反射获取带参构造方法并使用) 反射(通过反射获取成员变 ...

  5. day27(反射之内省机制实现BeanUtils)

    使用内省方式来实现beanUtils往对象里面存值 public class BeanInfoUtil2 { public static void setPropertyByIntrospector( ...

  6. day27

    27.01 反射(类的加载概述和加载时机) 1.类的加载 当程序要使用某个类时,如果该类还未加载到内存中,系统会通知加载,连接,初始化三步来实现对这个类初始化 a.加载 是指将.class文件读入内存 ...

  7. python 反射和内置方法

    一.isinstance和issubclass class Foo: pass class Son(Foo): pass s = Son() #判断一个对象是不是这个类的对象,传两个参数(对象,类) ...

  8. Python进阶-XVIII 封装、(属性、静态方法、类方法)语法糖、反射

    1.封装 类中的私有化:属性的私有化和方法的私有化 会用到私有的这个概念de场景 1.隐藏起一个属性 不想让类的外部调用 2.我想保护这个属性,不想让属性随意被改变 3.我想保护这个属性,不被子类继承 ...

  9. 隐私泄露杀手锏 —— Flash 权限反射

    [简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...

随机推荐

  1. GYM 101889E(dp)

    dp[i][j][k]表示第i位填数字k时,与后面的相连模数为j时,后面的数字最小填多少. 测得我提心吊胆还以为复杂度高了,结果出来46ms还是cf评测姬强啊. #pragma comment(lin ...

  2. HDU6440(费马小定理)

    其实我读题都懵逼--他给出一个素数p,让你设计一种加和乘的运算使得\[(m+n)^p = m^p+n^p\] 答案是设计成%p意义下的加法和乘法,这样:\[(m+n)^p\ \%\ p = m+n\] ...

  3. Java EE学习笔记(六)

    初识MyBatis 1.MyBatis的定义 1).MyBatis(前身是iBatis)是一个支持普通SQL查询.存储过程以及高级映射的持久层框架. 2).MyBatis框架也被称之为ORM(Obje ...

  4. Elasticsearch之安装

    elasticsearch需要java8以上支持 java -version 二进制文件下载 www.elastic.co/downloads tar安装示例 1.下载tar文件 curl -L -O ...

  5. 利用串口的硬件buf收发数据

    很多单片机的串口可以设置硬件接收和发送的buf,这样可以减少中断的次数和cpu的浪费,方法就是:发送时根据串口波特率(通讯格式N-8-1)和硬件buf缓冲的字节数计算定时器的间隔(小于1000*buf ...

  6. springmvc整合elasticsearch

    网上大多时关于springboot整合的,也有spring的,但是 坑太多,都没法愉快的玩耍 这篇让我整合成功 https://www.cnblogs.com/sunny1009/articles/7 ...

  7. httpd.exe占用100%CPU

    客户VPShttpd.exe进程占用100%CPU百度搜了下,很多文章: 在网上也没有能够直接找到比较好的解决方法,后来在一个帖子上看到说,有可能是apache与其他的软件冲突了(参考http://t ...

  8. codevs 1155 金明的预算方案

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房 ...

  9. shiro 配置拦截规则之后css和js等失效

    使用shiro作为平台的权限管理工具,shiro的配置文件如下: package com.ros.config; import java.util.LinkedHashMap;import java. ...

  10. 微信程序开发系列教程(三)使用微信API给微信用户发文本消息

    这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上.您对这个post请求做了应答(格 ...