@property   将类中的方法伪装成属性

与@property相关的俩个   @方法.setter   修改操作    @方法.deleter   删除一个property属性的时候会执行被deleter装饰的方法

在类的命名空间有什么:

  静态属性,

  方法(动态属性),

  @property方法

  类方法(@classmethod)

    类方法的默认参数:cls,指的是调用这个方法的类名

    类方法的调用方式:通过类名.类方法调用,本质就是方法  

    应用场景:如果你的整个方法中都没有用到对象命名空间中的名字,且你用到了类的命名空间中的名字(普通方法和property方法除外)

  静态方法(@staticmethod,)

    这个函数不需要默认参数self,cls

    静态方法的调用方式:通过类名.方法调用,本质是函数

    应用场景:函数在类中定义的时候,即类中函数

isinstance:判断对象与类直接的关系

  判断这个对象是不是类的对象,这个类子类的对象

issubclass(a,b):判断类与类之间的关系,(ab都必须是类,否则报错)

  判断这个类a是不是另一个类b的子类

反射 getattr  

  使用:getattr(变量名(命名空间),字符串(属于一个命名空间的变量名))

  定义:反射 指使用字符串数据类型的变量名来获取这个变量的值

  应用场景:

    input:用户输入

    文件:从文件中读出的字符串,想转换成变量的名字

    网络:将网络传输的字符串转换成年糕变量的名字

反射类的变量:静态属性,类方法,静态方法

class Foo:
School = "oldboy"
County = "China"
Language = "Chiness"
@classmethod
def class_method(cls):
print(cls.School)
def name(self):
print("alex")
a = Foo()
while True:
ch = input(">>>>>>>>>:").strip()
if hasattr(a,ch): #has 判断对象中是否存在这个方法
getattr(a,ch)() #执行方法

反射对象中的变量:对象属性,普通方法

class Foo:
def __init__(self,name,age):
self.name = name
self.age = age
def eating(self):
print("%s is eating"%self.name)
a = Foo("lin",23)
if hasattr(a,"name"):
print(getattr(a, "name")) #lin is eating
getattr(a,"eating")() #lin is eating

反射文本中的变量

import sys

sys.modules[__name__]    #反射本文件中的变量,固定使用这个命名空间

import sys  #加载sys模块
a = 1
b = 2
name ="alex"
def hello():
print("hello word")
print(getattr(sys.modules[__name__], "a"))
getattr(sys.modules[__name__],"hello")()

hasattr   (a,"b") 判断对象中有没有“b”这个方法,与getattr配合使用,防止报错

setattr (a,"b",c) 接受三个参数,命名空间,“变量名”,变量值

  

class Foo:
Country = "China"
def func():
print("hello world")
Foo.Shool = "old boy"
setattr(Foo,"teacher","alex") #Foo.Shool = "old boy"与他作用相同,都是给类中增加属性
print(Foo.__dict__) # 'Country': 'China','Shool': 'old boy', 'teacher': 'alex'等

delattr   (a,"b")   删除命名空间中b这个属性,如果没有会报错

class Foo:
Country = "China"
def func():
print("hello world")
Foo.Shool = "old boy"
del Foo.Country
print(Foo.__dict__)
delattr(Foo,'Country') #del Foo.Country作用是一样的
print(Foo.__dict__)

反射getattr的更多相关文章

  1. 面向对象进阶----->反射 getattr 和hasattr方法

    判断一个对象有没有血缘关系:isinstance() 里面写的是字类对象和父类名用来判断他们的关系 issubclass()是用来判断两个类是不是有继承的关系 ,括号内 写字类名和父类名  可以判断出 ...

  2. python day21 ——面向对像-反射 getattr,内置方法

    一.反射:用字符串数据类型的变量名来访问这个变量的值 上代码^_^ # class Student: # ROLE = 'STUDENT' # @classmethod # def check_cou ...

  3. python全栈开发day23-面向对象高级:反射(getattr、hasattr、setattr、delattr)、__call__、__len__、__str__、__repr__、__hash__、__eq__、isinstance、issubclass

    一.今日内容总结 1.反射 使用字符串数据类型的变量名来操作一个变量的值. #使用反射获取某个命名空间中的值, #需要 #有一个变量指向这个命名空间 #字符串数据类型的名字 #再使用getattr获取 ...

  4. 反射getattr,hasattr,setattr,delattr

    通过字符串映射或修改程序运行时的状态.属性.方法, 有以下4个方法 getattr(object, name_str, default=None) 根据字符串name_str去获取obj对象里的方法内 ...

  5. Python笔记【7】_反射getattr&hasattr&setattr&delattr

    Lesson0402_GetatrrWebsite.py #!/usr/bin/env/python #-*-coding:utf-8-*- #Author:LingChongShi #查看源码Ctr ...

  6. python中反射 getattr(对象,'方法')()和hasattr(对象,'方法')

    getattr(对象,'方法')():从一个对象里面找到里面的方法,,, 传了一个对象,再传一个字符串,就能找到这个字符串的方法 hasattr(对象,'方法') 判断这个对象里面有没有这个方法,返回 ...

  7. python反射

    python反射 python的反射是基于字符串的形式去对象(模块)中操作其成员.此操作是动态的,常用于web开发中url参数中对应模块或者函数的反射. 下面开始具体说明: 场景需求: 我的pytho ...

  8. python 异常 反射

    异常 反射 一.异常处理: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportError ...

  9. python 全栈开发,Day113(方法和函数的区别,yield,反射)

    一.方法和函数的区别 面向对象 初级 class StarkConfig(object): def __init__(self,model_class): self.model_class = mod ...

随机推荐

  1. 理解ASP.NET Core - 基于JwtBearer的身份认证(Authentication)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 在开始之前,如果你还不了解基于Cookie的身份认证,那么建议你先阅读<基于Cookie ...

  2. python基础语法_10错误与异常

    Python有两种错误很容易辨认:语法错误和异常. 语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 异常 即便Python程序的语法是正确的,在运行它的时候,也有可能 ...

  3. 使用纯swift代码文件制作framework

    因为最近我们公司的一个客户要求我们使用swift编写程序并且将API封装成framework的形式提供给他们,所以我就开始了swift实践之路. 程序编写完之后,我就琢磨怎么封装成framework的 ...

  4. MySQL里的那些日志们

    该系列博文会告诉你如何从入门到进阶,从sql基本的使用方法,从MySQL执行引擎再到索引.事务等知识,一步步地学习MySQL相关技术的实现原理,更好地了解如何基于这些知识来优化sql,减少SQL执行时 ...

  5. suging闲谈-netty 的异步非阻塞IO线程与业务线程分离

    前言 surging 对外沉寂了一段时间了,但是作者并没有闲着,而是针对于客户的需要添加了不少功能,也给我带来了不少外快收益, 就比如协议转化,consul 的watcher 机制,JAVA版本,sk ...

  6. 2018 PHP面试题

    2018 PHP面试题 题目来自<PHP程序员面试笔试宝典>,里面涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. 1.PHP常考基础 1.PHP ...

  7. C#字符串Base64编解码

    C#字符串Base64编解码 首先讲一下什么是Base64编码所谓Base64就是一种基于64个可打印字符来表示二进制数据的方法.Base64编码是从二进制到字符的过程,常用于在网络上传输不可见字符( ...

  8. verification TLM传输数据导致多线程访问同一个数据

    TLM传输数据导致多线程访问同一个数据 原因 TLM发送数据跟mailbox类似,都是发送的引用,这样发送端和接收端的引用都指向同一个数据,这样就会出现发送端修改数据会影响到接收端,比如发送的时候数据 ...

  9. 深入MySQL(二):MySQL的数据类型

    前言 对于MySQL中的数据类型的选择,不同的数据类型看起来可能是相同的效果,但是其实很多时候天差地别. 本章从MySQL中的常用类型出发,结合类型选择的常见错误,贯彻MySQL的常用类型选择. 常用 ...

  10. JUC之Java中的阻塞队列及其实现原理

    在文章线程池实现原理 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中介绍了线程池的组成部分,其中一个组成部分就是阻塞队列.那么JAVA中的阻塞队列如何实现的呢? 阻塞队列,关键字是阻塞 ...