类对象

python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法

好久不见. 提交于 2020-04-08 12:26:48
1. 类对象和实例对象   Python 中一切皆对象,Python类本身也是一种对象,类定义完成后,会在当前作用域中定义一个以类名为名字的命名空间。类对象具有以下两种操作: 可以通过“类名()”的方式实例化一个对象。 可以通过“类名.类属性”的方式来访问一个类属性。   如果说类时一种概念性的定义,是一种类别,那么实例对象就是对这一类别的具体化、实例化,即实例化对象是类对象实例化之后的产物。 class Person:# 声明一个类对象 pass p1 = Person()#声明一个实例对象 print(Person)#输出结果:<class '__main__.Person'> print(p1)#<__main__.Person object at 0x0000015F7F94D0F0> 2 类变量与实例变量 2.1 概念上的区别   类变量是指是指该类的所有实例说共有的数据,实例变量是该类每一个实例所特有的数据。这么说的话可能还是很抽象,我们拿人类(Person类)来打比方,人类能移动(move=True),这是每一个人(张三、李四)都能做的,所以我们可以说人类能移动,张三能移动,李四也能移动,这里的移动(move)就是一个类变量。但每一个人都可能有不同的姓名(name)和年龄(age),张三可能20岁,李四可能30岁,但是我们不能说人类(Person)都是20岁或30岁

【总结—.Net Framework集合类】

≡放荡痞女 提交于 2020-04-07 10:01:51
写在前面: 最近在学习 .Net 的集合框架,看了许多博文,也看了书,总感觉不是很明白。心里疑惑很多,每天郁闷度日。如果学技术时感到很痛苦,有两种可能,其一是学习方法不对;其二是真的不适合。希望大多数搞技术的朋友都不属于后者。方法不对,那得找解决方法呀,于是乎网上一顿狂搜,也没发现有价值的文章。同样地,我搜索了一下 Java 的集合类,文章一堆,图片更少满天飞。而 .Net 连一张像样的说明图片都没有,觉得微软的技术总是藏着掖着,放佛怕人知道似的。不知道各位有没有这样的想法 !? 不过话又说回来,这样也好,越是不想让我知道,我就越想知道,自己总结出来的东西才记忆深刻! 上面这幅图是 Java 的。 下面就把这几天的学习成果总结一下,与朋友们共享,有纰漏的地方还望指点! 集合,表示可以通过遍历每个元素来访问的一组对象 ( 特别是可使用 foreach 循环访问 ) 。一个集合包括多个元素,即有一个集合类对象和 N 个元素对象。 因为任何集合类都实现了 IEnumerable 接口,所以任何集合类对象都有一个 GetEnumerator() 方法,该方法可以返回一个实现了 IEnumerator 接口的对象,这个返回的 IEnumerator 对象既不是集合类对象,也不是集合的元素类对象,它是一个独立的类对象。通过这个对象,可以遍历访问集合类对象中的每一个元素对象

.Net学习 第2季07 C#面向对象 多态

爷,独闯天下 提交于 2020-04-07 01:59:21
.Net 视频学习第2季 C#面向对象 面向对象 多态 概念:让一个(父类)对象表现出多种(子类)类型的特性;三种方法:虚方法/抽象类/接口 方法一:虚方法 将父类方法标记为虚方法,使用关键字virtual在返回值类型前,这个方法可以被子类重写一遍(在子类方法返回值类型前使用关键字override) 没有使用虚方法下: public class Person { private string _name; public string Name { get{return _name;}     set{_name = value;} } public Person(string name) { this.Name = name; } public void SayHello() { Console.WriteLine("I am a person"); } } public class Chinese:Person { public Chinese(string name):base(name) { } public void SayHello() { Console.WriteLine("I am Chinese"); } } public class Japanese:Person { public Japanese(string name):base(name) { }

java-反射

帅比萌擦擦* 提交于 2020-04-06 07:01:04
反射:在运行时期,通过反射可以动态地去获取类中的信息(类的信息,方法信息,构造器信息,字段等信息); 类的加载过程(加载机制):   1. 编码   2. 类的加载器去加载(将字节码文件加载到JVM中,给每个类创建字节码对象)   3. 初始化   4. 运行期 1. Class实例 其实就是一些类型(类 接口 数组 基本数据类型 void)的字节码对象 Class 类的实例表示正在运行的 Java 应用程序中的类和接口(字节码对象); 枚举是一种类,注释(指的是注解Annotation)是一种接口; 每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象; 基本的 Java 类型( boolean 、 byte 、 char 、 short 、 int 、 long 、 float 和 double )和关键字 void 也表示为 Class 对象;    注意 :   1 、 Class 类 和它的实例的产生: Class 的实例是已经存在的类型, 所以不能够直接 new 一个 Class 对象出来 ,而通过已知的类型和 Class 来获得   2 、同一种类型不管通过什么方式得到 Class 的实例都是相等的; 一个类型的字节码对象只有一份 !     线程同步:同步监听对象 字节码对象来充当同步监听

Java三大特性之多态

橙三吉。 提交于 2020-04-06 02:32:27
一、概念 所谓多态,就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。 因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。 通俗来说,就是用父类来声明对象,而用子类来new对象。这依赖于“向上转型”,即由于子类是由父类继承而来的,所以new出的子类对象可以自动向上转型为父类。 当然这样的向上转型也有相应的缺陷,就是它必定会导致一些方法和属性的丢失,而导致我们不能够获取它们。所以父类类型的引用可以调用父类中定义的所有属性和方法,对于只存在与子类中的方法和属性它就望尘莫及了。 二、实现 1.实现条件 继承:在多态中必须存在有继承关系的子类和父类。 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。 2.实现形式 继承 接口 3.多态的继承原则 当超类对象引用变量引用子类对象时

访问控制

可紊 提交于 2020-04-05 17:38:16
访问控制 访问控制指的是:控制类对象的属性和方法在类对象的外部是否可以直接访问 如果再类对象的某个属性和方法前添加两个下划线__,那么在类对象的外部就不能直接访问该属性和方法 #-*-coding:utf-8-*- #@author :vict #@Time :2020-4-1 22:47 #@File :test1 #@software :PyCharm class Myclass(object): def __init__(self): self.__pia = 18 def __pim(self): print("__pim被调用") def do_sth(self): print(self.__pia) self.__pim() mc = Myclass() # print(mc.__pia)# AttributeError: 'Myclass' object has no attribute '__pia' # mc.__pim() # AttributeError: 'Myclass' object has no attribute '__pim' mc.do_sth() """ 之所以不能在类对象的外部直接访问以下划线开头的属性或方法,是因为:python解释器对外把 属性或方法__xxx改成了另外一个名字:_类名__xxx。所以,在类对象的外部仍然可以通过_类名_

Java的类反射机制(Java高级)

喜夏-厌秋 提交于 2020-04-05 15:14:17
思维导图 概述 为什么要用反射:任意调用类中的私有内容,使类的使用更加灵活。 反射:针对性地映射 某一个完整事务的行为或特征(单独操作类中任意内容) 1、反射机制 - 获取对象 什么是类对象? 类对象,就是用于描述这种类,都有什么属性,什么方法。 对象之前的区别? gareen 和 teemo都是 Hero对象,他们的区别在于:各自有不同的名称、血量、技能。 类之间的区别? Hero 和 soldier 都是类,他们的区别在于有:不同的方法,不同的属性。 获取类对象的3种方式 Class.forName Hero.class new Hero().getClass() package reflection; import charactor.Hero; public class TestReflection { public static void main(String[] args) { String className = "charactor.Hero"; try { Class pClass1=Class.forName(className); Class pClass2=Hero.class; Class pClass3=new Hero().getClass(); System.out.println(pClass1==pClass2); System.out

利用反射动态创建对象

房东的猫 提交于 2020-04-04 08:42:56
前两天我发了一篇文章《 通过反射动态实例化对象中出现的一个奇怪问题 》,对反射中的某些问题疑惑不解。通过这几天不断查看MSDN,上网查询,现在终于解决了该问题。 在VS.Net中,有很多种方法动态调用对象的构造函数。一是通过Activator类的CreateInstance()方法。这个方法我们在Remoting中也用过。它实际上是在本地或从远程创建对象类型,或获取对现有远程对象的引用。它的方法签名是:public static object CreateInstance(Type);(还有其他重载方法)注意它的返回值为object,MSDN对返回值的描述是: 对新创建对象的引用。 二是通过Assembly类的方法CreateInstance()。方法名和前一样,不过它不是静态方法。Assembly是在System.Reflection命名空间中。方法签名:public object CreateInstance(Type);(同样还有其他重载方法)返回值仍然是object,MSDN对返回值的描述是: 表示该类型的 Object 的实例,其区域性、参数、联编程序和激活属性设置为空引用(Visual Basic 中为 Nothing),并且 BindingFlags 设置为 Public 或 Instance,或者设置为空引用 (Nothing)(如果没有找到 typeName)。

反射 元类

可紊 提交于 2020-03-31 08:27:15
一.反射(reflect) 反射指的是一个对象应该具备,可以检测,修改,增加自身属性的能力 反射就是对字符串操作属性 四个内置函数: 1.hasattr(p,'name') 判断某个对象是否存在某个属性 2.getattr(p,'name',None) 从对象中取出属性, 第三个参数默认值,当属性不存在返回默然值 3.setattr(p,'name','123') 为对象添加属性 4.delattr(p,'name') 从对象中删除属性 代码: class Person: def __init__(self,name,age): self.name = name self.age = age def say_hi(self): print('hi my name is %s'%self.name) p = Person('jack',12) print(p.name) hasattr(p,'name') print(hasattr(p,'name')) if hasattr(p,'name'): print(getattr(p, 'name', None)) print(getattr(p,'name',None)) print(getattr(p,'ane',None)) # None # p.sb = '123' setattr(p,'sb','123') # print(p

Java反射

时光怂恿深爱的人放手 提交于 2020-03-28 07:20:27
主要参考这篇文章 https://blog.csdn.net/sinat_38259539/article/details/71799078 什么是反射? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 反射就是把java类中的各种成分映射成一个个的Java对象: 例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象 类对象 每个类在第一次被调用时,都会被jvm创建类对象(因此只会有一个类对象),并加载到jvm内存.我们可以通过类对象来实现java反射的功能,即在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性 怎么获取类对象? 三种方法: Student stu = new Student("张三"); //第一种, 通过getClass()方法 Class clz1 = stu.getClass(); //第二种,通过class属性 Class clz2 = Student.class; //第三种,通过类的全名 Class clz3 = Class.forName("com.test