Python 之 类的反射

类的反射作用

当一个类中,带有多个方法时,要求用户输入方法名,并调用相应函数,此时就可使用类的反射方法,来快速调用相应函数,而不再需要使用多个IF判断条件语句。

类的反射方法

  1. hasattr(obj,name_str) 判断一个对象OBJ里是否有对应的name_str字符串的方法
  2. getattr(obj,name_str) 根据字符串去获取obj对象里的对应方法的内存地址
  3. setattr(obj,‘y‘,z) 相当于 obj.y = ‘v‘
  4. delattr(obj,name_str) 删除一个对象

代码

#Author Kang

class Dog(object):

    def __init__(self,name):
        self.Name = name

    def eat(self):
        print("%s is eatting...."%(self.Name))

    def talk(self):
        print("%s is talking...."%self.Name)

    def sleep(self):
        print("%s is sleep...."%self.Name)

    def walk(self):
        print("%s is walking..."%self.Name)

    def alert(self):
        print("此方法不存在")

d1 = Dog("二哈")
choice = input("请输入你想要的:>>")
if hasattr(Dog,choice):             #判断Dog类是否有此方法
    func = getattr(d1,choice)       #调用该方法(返回值为函数地址)
    func()                          #运行该函数,并可传值
else:
    print("你输入的方法有误!!!!")

结果:
请输入你想要的:>>eat
二哈 is eatting....

请输入你想要的:>>eat
二哈 is eatting....

原文地址:https://blog.51cto.com/12965094/2352988

时间: 2024-10-11 00:20:16

Python 之 类的反射的相关文章

Python第二十一课(反射/元类)

Python第二十一课(反射/元类)    >>>思维导图>>>中二青年 反射reflect 什么是反射, 其实是反省,自省的意思 反射指的是一个对象应该具备,可以检测,修改,增加自身属性的能力 反射就是通过字符串操作属性 涉及的四个函数,这四个函数就是普通的内置函数 没有双下划綫,与print等等没有区别 hasattr getattr setattr delattr p = Person("jack",18,"man") #

Python开发基础-Day22反射、面向对象进阶

isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象,如果是返回True 1 class Foo(object): 2 pass 3 obj = Foo() 4 print(isinstance(obj, Foo)) issubclass(sub, super)检查sub类是否是 super 类的派生类,如果是返回True 1 class Foo(object): 2 pass 3 cla

【python】-- 类的装饰器方法、特殊成员方法

装饰器方法 类的另外的特性,装饰器方法:静态方法(staticmethod).类方法(classmethod).属性方法(property) 一.静态方法 在方法名前加上@staticmethod装饰器,表示此方法为静态方法 class Dog(object): def __init__(self,name): self.name = name @staticmethod #在方法前加上staticmethod 装饰器定义静态方法 def eat(): print("dog is eating&

SEL 类型 和 类的反射

SEL 类型 SEL 类型是用来描述一个方法的,可以理解为SEL是方法的指针.该SEL类型类似于Java中的Method类.OC中可以通过两种方法来获得SEL类型. @selector(methodName) : NSSelectorFromString(@"methodName") ; 反射的方法 -(BOOL) isKindOfClass : (class) clazz isKindOfClass 方法用来判断当前对象是否是一个类或者其子类的实例 [cat isKindOfClas

[Python]剖析类的机理

Python是如何创建类的? 当python的解释器碰到类的定义的时候,它会像对待其他code一样先读取其内容,然后为这个class创建一个新的namespace并且执行其代码.类的定义通常包括变量,方法以及其他类.这些内容都在新的命名空间里面.从类的内容读到到类的对象的产生是通过内置type函数来实现,所以type函数也提供可动态创建类的可能. 用type函数动态创建类的时候,type这个构造函数需要三个参数,分别是类名,基类以及其属性. type实际上是一个元类,所谓的元类就是可以创建其他类

python Class(类) and Object Oriented(面向)

Python类与面向对象    程序=指令+数据 (或算法+数据结构).代码可以选择以指令为核心或以数据为核心进行编写.    两种范型        (1)以指令为核心:围绕"正在发生什么"进行编写(面向过程编程:程序具有一系列线性步骤:主体思想是代码作用于数据)以指令为中心,程序员的主要工作在于设计算法.        (2)以数据为核心:围绕"将影响谁"进行编写(面向对象编程<oop>:围绕数据及为数据严格定义的接口来组织程序,用数据控制对代码的访

java工厂类与反射机制

java 简单工厂类 2012-04-22 15:44:07|  分类: java |  标签:java工厂类  简单工厂类  |举报|字号 订阅 简单工厂模式需要由以下角色组成: 接口                        接口的实现类(简单工厂模式里面的具体产品角色)                        工厂注意对比以下三个实例的不同实例1: package org.jzkangta.factorydemo01;//定义接口interface Car{    public 

Python 的类的下划线命名有什么不同?

1,以一个下划线开头的命名 ,如_getFile2,以两个下划线开头的命名 ,如__filename3,以两个下划线开头和结尾的命名,如 __init__()4,其它这些命名有什么不同吗 首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入.不过值得注意的是,如果使用 import a_module 这样导入模块,仍然可以用 a_module._some_var

类的反射 typeof 或GetType

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Reflection; namespace ConsoleApplication10 { class Program { static void Main(string[] args) { // 类的反射 typeof 或GetType Ty