python4-反射_类

反射:

有:demo.py    里面有 函数Foo()

str1 = ‘demo‘
str2 = ‘Foo‘
module = __import__(str1)
func = getattr(module,str2)

实例:通常适用于url
代码目录结构为: backend包 下面又account.py模块 里面又login函数           
data = raw_input(‘请输入地址:‘) #account/login   
array = data.split(‘/‘)

userspance = __import__(‘backend.‘+array[0])
model = getattr(userspance,array[0])
func = getattr(model,arry[1])
func()


面向对象:
类:

class People(object):
    name=‘name‘                              这是属于类的变量,类直接可以访问。   
    dict={}                               字典是所有实例共享一份数据,共有
    def __init__(self,name,age,job):   初始化函数(构造函数), 定义参数.这里的变量是私有的
        self.name=name                       加self是变成实例变量,其他函数也能调用
        self.age=age
        self.job=job
        self.__name=name          私有变量,外部不能访问
    def walk(self):                              都需要加self(self指的是实例本身)
        print "i am walking..."
    self.__breath()                         内部可以调用
     def talk(self):
        print "talking with sb...",self.name
     def __breate(self):                        私有方法外部不能访问,对象不能访问
        pass
p1=People(‘dengminhui‘,‘10‘,‘enginner‘)          实例化,传入参数
p1.walk()
p1.talk()
p1.__breath       不能调用

强行调用私有变量  p1.__People.__name

类的继承:

class SchoolMember(object):
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        selef.sex=sex
    def func(self):
         pass
继承  
class Student(SchoolMember):
    def __init__(self,name,age,sex,grade):
        SchoolMember.__init__(self,name,age,sex)      这里是继承父类的变量
        self.grade=grade                              重写构造函数后,这里是添加的变量

def func(self):
        SchoolMember.tell(self)                       函数重写
        添加code

多继承
class School(object):
    def __init__(self,name,tel,addr):
        self.tel=tel
        self.addr=addr
    self.stu_list=[]
    self.tech_list=[]

class Student(SchoolMember,School):

静态方法:

class MyClass(object):
    age = 22
    def __init__(self):
        self.name = "a"
     def sayhi(self):
         print "---sayhi 1"
      @staticmethod              #静态方法 跟类没什么关系,不需要实例化即可调用,类的工具包
      def sayhi2():             不需要加self
          print "---sayhi 2",self.name,self.age-----------> self对象不会传进来,所以都不能访问调用
       @classmethod               不需要实例化即可调用,不能访问实例数据。。。。实例化也可以调用属性
       def sayh3(self):
            print "---sayhi 3"  sself.name self.age       不能访问self.name,只能访问类属性
    @property                  把一个静态方法变成静态属性
        def sayh4(self):
        print "----sayhi4"
        return ‘test‘       
调用:
MyClass.syahi2()

m=MyClass()
m.sayh4              ------> 结果会是 test

print m.__dict__   __dict__方法会把对象的所有属性全部打印出来。
新式类和经典类:

时间: 2024-11-08 13:17:38

python4-反射_类的相关文章

反射工具类——ReflectUtils

测试方法:根据已知的方法名,来反射调用方法 package com.redmoon.forum.job; import java.util.ArrayList; import java.util.List; import com.common.utils.ReflectUtils; public class Test { private String name; public String getName() { return name; } public void setName(String

利用反射更新类

#region 利用反射更新类 /// <summary> /// 利用反射更新类 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <param name="db"></param> public static void

java 反射提取类信息, 动态代理 和过滤某些方法演示

package org.rui.classts.reflects; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.regex.Pattern; /** * 提取 类的 方法 构造器 * @author lenovo * */ //{args:ShowMethods} //查看一个类的所有方法和构造器 public class ShowMethods { private

C++ Primer 学习笔记_17_类与数据抽象(3)_类作用域

C++ Primer 学习笔记_17_类与数据抽象(3)_类作用域 引言: 每个类都定义了自己的新作用域与唯一的类型.即使两个类具有完全相同的成员列表,它们也是不同的类型.每个类的成员不同与任何其他类(或任何其他作用域)的成员. 一.类作用域中的名字查找 1)首先,在使用该名字的块中查找名字的声明.只考虑在该项使用之前声明的名字. 2)如果在1)中找不到,则在包围的作用域中查找. 如果找不到任何声明,则出错. 类的定义实际上是在两个阶段中处理: 1)首先,编译器声明: 2)只有在所有成员出现之后

反射获取类的几种方法

1 public class Demo { 2 3 /** 4 * 反射:加载类,获得类的字节码 5 * @param args 6 * @throws ClassNotFoundException 7 */ 8 public static void main(String[] args) throws ClassNotFoundException { 9 10 //1 11 Class clazz = Class.forName("Person"); 12 13 //2 14 Cla

通过反射查看类信息

通过反射查看类信息 1.获得Class对象的三个方式 (1)使用Class类的forName(String clazzName)静态方法.该方法需要传入字符串参数,该字符串参数的值是某个类的全限定名(必须添加完整的包名): //例如在JDBC中加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); (2)调用某个类的class属性来获取该类对应的Class对象: //假设现有Student类 //调用该类的class属性获取Class对象 Cla

黑马程序员——Java基础---反射Class类、Constructor类、Field类

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 反射的应用场景 一.概述 反射技术: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的

C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明

C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明 在C++中,用类来定义自己的抽象数据类型.通过定义类型来对应所要解决的问题中的各种概念,可以使我们更容易编写.调试和修改程序.可以使得自己定义的数据类型用起来与内置类型一样容易和直观. 看一下Sales_item类: class Sales_item { private: std::string isbn; unsigned units_sold; double revenue; public: double ave_pr

Java反射(二)利用反射分析类的能力

利用反射分析类能力的类的源码如下(来源于<Java核心技术>卷一): package testreflection; import java.util.*; import java.lang.reflect.*; /** * 这个类利用反射打印出一个类的所有特征 * * @version 1.1 2004-02-21 * @author Cay Horstmann */ public class ReflectionTest { public static void main(String[]

反射操作工具类

using System; using System.Collections.Generic; using System.Data; using System.Reflection; namespace Framework.Utility { /// <summary> /// 反射操作工具类 /// </summary> public class ReflectionUtil { #region 根据反射机制将dataTable中指定行的数据赋给obj对象 /// <sum