-
2021-12-20 19:56:26
创建一个类的三种方法:
class Annimao(): pass class Annimao(object): pass class Annimao: pass
三种类方法:
1、实例方法
class Person: def __init__(self,age,name): self.age = age self.name = name def speak(self): print('说了一段话') if __name__ == '__main__': per = Person(24,'huitao') Person.speak() per.speak()
Person.speak()不允许类名字调用实例方法
F:\开发工具\pythonProject\flaskTest\venv\Scripts\python.exe F:/开发工具/pythonProject/flaskTest/tessss.py Traceback (most recent call last): File "F:\开发工具\pythonProject\flaskTest\tessss.py", line 79, in <module> Person.speak() TypeError: speak() missing 1 required positional argument: 'self' Process finished with exit code 1
去掉Person.speak()
结果:
F:\开发工具\pythonProject\flaskTest\venv\Scripts\python.exe F:/开发工具/pythonProject/flaskTest/tessss.py 说了一段话 Process finished with exit code 0
2、类方法
class Employer(object): def __init__(self): pass @classmethod def speak(cls): print('不允许讲话') if __name__ == '__main__': em = Employer() em.speak() Employer.speak()
结果:输出了同样的内容
F:\开发工具\pythonProject\flaskTest\venv\Scripts\python.exe F:/开发工具/pythonProject/flaskTest/tessss.py 不允许讲话 不允许讲话 Process finished with exit code 0
3、静态方法
class Gun(): def __init__(self): pass @staticmethod def speak(): print('又开始说话了') if __name__ == '__main__': g = Gun() Gun.speak() g.speak()
结果:输出同样内容
F:\开发工具\pythonProject\flaskTest\venv\Scripts\python.exe F:/开发工具/pythonProject/flaskTest/tessss.py 又开始说话了 又开始说话了 Process finished with exit code 0
注释:不推荐使用类方法和静态方法,建议使用实例方法
更多相关内容 -
Java 创建类的四种方式
2020-10-11 21:53:51Java 创建类的四种方式 对于上学期已经学习过c++的同学,是不是对另一大编程语言产生了浓厚的兴趣,对于c++的面向对象编程,又和java的面向变量有何区别,下面我们从java四种创建对象来说起。 一:new运算的方式创建...Java 创建类的四种方式
对于上学期已经学习过c++的同学,是不是对另一大编程语言产生了浓厚的兴趣,对于c++的面向对象编程,又和java的面向变量有何区别,下面我们从java四种创建对象来说起。
一:new运算的方式创建对象
首先我们有一个关于宠物的类Dog
当我们程序中需要出现一只狗狗的时候,我们就可以使用new来创建一个具体的对象了
我们祥和里通过了new的方式获得了一个具体的对象,小黑年龄时是三岁。二:通过反射的方式创建对象
Java的反射技术是java程序的特征之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。
反射的作用:
1)可以通过反射机制发现对象的类型,找到类中包含的方法、属性和构造器
2)可以通过反射创建对象并访问任意对象方法和属性第二种创建java对象的方式就是通过反射来创建了。
还是我们之前用过的Dog类,首先JVM利用ClassLoader(类加载器)先将Dog类加载到内存,然后马上产生了一个Class类型的对象,该对象可以看成是一个模型,以后无论创建多少个Dog类的实例都是利用该模型来生成(一个类所对应的Class类型的对象只有一个)。
通过反射创建对象第一步:需要获得class对象Class clazz = Dog.class;
这样获取到类对象之后就可以通过newInstance()这个方法来获取具体的对象了,需要注意的是这个方法的返回值是Object类型,我们需要进行转型操作
Class clazz = Dog.class; Dog dog = (Dog)clazz.newInstance();
这样我们就通过反射的方式创建好了java对象,newInstance()和new的区别如下:
newInstance: 弱类型。低效率。只能调用无参构造。
new: 强类型。相对高效。能调用任何public构造。在这里需要注意的是,newInstance()这个方法只能够调用无参的构造函数(其实这也符合javabean规范,一个类必须拥有一个无参构造函数),现在我们在Dog类中写有参构造函数(默认覆盖无参构造函数),值得注意的是,当我们写了有参构造函数之后,系统将不再提供默认的无参构造函数,如果需要的话,需要你自己写
public class Dog { String name; int age; public Dog(String name,int age){ this.name=name; this.age=age; } }
现在再去调用newInstance()方法
Class clazz=Dog.class;
Dog dog=(Dog) clazz.newInstance();现在程序运行结果为java.lang.InstantiationException,着就是程序没有无参构造函数而使用newInstance()方法引发的错误了
当然如果你需要调用有参构造函数的话,可以通过以下的办法:Class clazz=Dog.class; Constructor constructor=clazz.getConstructor(String.class,int.class}); Dog dog=(Dog) constructor.newInstance("xiaohei",3}); System.out.println(dog.name+" "+dog.age);
程序的第二行我们调用Class对象的getConstructor方法,然后在参数列表中传入String和int,因为我们的有参构造函数的参数列表就是这样规定的,现在我们就获取到了前边定义好的Dog类的有参构造函数了
第三行我们通过获取的Constructor对象调用newInstance方法,然后在方法中传入Object类型的参数列表,因为我们的有参构造函数需要这些值,这样就可以通过反射的方式创建只有有参构造函数的对象了
三:通过对象反序列化的方式来创建
当我们使用反序列化一个对象的时候,JVM会给我们创建一个对象。但是,反序列化的时候JVM并不会去调用类的构造函数(前边两种方式都会去调用构造函数)来创建对象,而是通过之前序列化对象的字节序列来创建的。序列化对象必须实现Serializable这个接口
把对象转为字节序列的过程称为对象的序列化
把字节序列恢复为对象的过程称为对象的反序列化public class Dog implements Serializable{ String name; int age; public void show(){ System.out.println("我叫"+this.name+"今年"+this.age+"岁了"); } }
需要注意的是:Dog类需要实现Serializable这个接口才可以被序列化/反序列化,否则会出现java.io.NotSerializableException异常
对象序列化通常有两种用途:
1)将对象的字节序列永久的保存到硬盘上
例如web服务器把某些对象保存到硬盘让他们离开内存空间,节约内存,当需要的时候再从硬盘上取回到内存中使用
2)在网络上传递字节序列
当两个进程进行远程通讯的时候,发送方将java对象转换成字节序列发送(序列化),接受方再把这些字节序列转换成java对象(反序列化)
当Dog类实现了Serializable接口后,我们现在将Dog对象序列化1 2 3 4 5 6 7 Dog dog=new Dog(); dog.name="xiaohei"; dog.age=3; FileOutputStream fos = new FileOutputStream("dog.txt"); ObjectOutputStream ops = new ObjectOutputStream(fos); ops.writeObject(dog); System.out.println("dog对象序列化完成");
通过ObjectOutputStream的writeObject方法,我们就将一个对象完成了序列化
现在我们再次将刚才序列化后的对象反序列化回来,这次用到的是ObjectInputStream的readObject方法:
1 2 3 4 5 FileOutputStream fos=new FileOutputStream("dog.txt"); ObjectInputStream ois=new ObjectInputStream(fos); Dog dog=(Dog) ois.readObject(); System.out.println("我叫"+dog.name+"今年"+dog.age+"岁了"); System.out.println("对象反序列化完成");
这样我们就使用了对象的序列化完成了java对象的创建
四:通过clone的方式来创建
clone方法来源于java中object类,在jdk中的解释为:该方法返回一个此对象的副本。clone顾名思义就是复制的意思。所谓复制对象就是在内存中分配一个和原一模一样的空间,在此创建新的对象。我们现在就来完成clone的实验,首先我们需要在需要clone的类中实现Cloneable接口,否则会出现java.lang.CloneNotSupportedException异常,由于Object类中clone方法是protected 修饰的,所以我们必须在需要克隆的类中重写克隆方法
public class Dog implements Cloneable{ String name; int age; @Override protected Object clone() throws CloneNotSupportedException { //TODO Auto-generated method stub return super.clone(); } } 现在进入实验1: Dog d1=new Dog(); Dog d2=d1; System.out.println(d1==d2);
返回值为true,因为在这个地方只有d1是真实创建了对象,d2来源于d1的赋值,引用地址值一样(代表是同一个对象),所以==判断结果为true
现在进入实验2:
Dog d1=new Dog(); Dog d2=(Dog) d1.clone(); System.out.println(d1==d2);
实验结果为false,因为clone是真实在内存中重新划分一块区域来存储新的对象,d1和d2是两个不同的对象所以返回结果值为false
这样我们就使用了对象的克隆的方式完成了java对象的创建
值得一提的是
Java对象种通过new出来的是管理者
而c加加中new出来的是独立的
今天的分享到此结束。 -
Python定义类、创建类的对象(类的实例化)
2021-10-25 20:37:50在python中,可以通过class关键字定义类,然后通过定义的类来创建实例对象。语法格式如下: calss 类名: 类体 注意事项 在python中使用class关键字来定义类,定义类时需要注意以下几个事项: (1)类代码块以...定义类
语法格式
在python中,可以通过class关键字定义类,然后通过定义的类来创建实例对象。语法格式如下:calss 类名: 类体
注意事项
在python中使用class关键字来定义类,定义类时需要注意以下几个事项:
(1)类代码块以class关键字开头,代表定义类。
(2)class之后是类名,这个名字由用户自己指定,命名规则一般是多个单词组成的名称,每个单词除了第一个字母大写之外,其余字母均为小写,class和类名中间要有空格。
(3)类名后加冒号,类体由缩进的语句块组成,定义在类体内的元素都是类的成员。类的成员分为两种类型:描述状态的数据成员(也称属性)和描述操作的函数成员(也称方法)。
(4)一个类通常包含一种特殊的方法:__init__()
。这个方法被称为初始化方法,又称为构造方法,它在创建和初始化一个新对象时被调用,初始化方法通常被设计用于完成对象的初始化工作。方法的命名也是符合驼峰命名规则,但是方法的首字母小写。
(5)在python中,类被称为类对象,类的实例被称为类的对象。python解释器解释执行class语句时,会创建一个类对象。
(6)类中定义中的每个方法都必须至少有一个名为self的参数,并且必须是方法的第一个参数(如果有多个形式参数)。self指向调用自己方法的对象,用户不需要也不能给这个参数传递值,事实上,Python自动把类的对象传递给该参数。
举例
矩形类定义实例:
函数与方法:
在python中,函数与方法是有区别的。方法一般指与特定对象绑定的函数,通过对象调用方法时,对象本身将作为第一个参数传递过去,通常函数没有这个特点。创建类的对象(实例)
类是抽象的,要使用类定义的功能就必须对类进行实例化,即创建类的对象。创建后就可以使用成员运算符“.”来调用对象的属性和方法。
方式如下:
对象名=类名(参数列表)
调用对象的属性和方法的格式:
对象名.对象的属性
对象名.对象的方法()
以下使用类的名称Rectangle来创建对象:>>>Rectangle1=Rectangle(3,6) >>>Rectangle.getArea() 18 >>>Rectangle.getPerimeter() 18
Retangle类中的初始化方法中有默认的width和height,接下来,创建默认width为2、height为5的Rectangle对象:
>>>Rectangle2=Rectangle() >>>Rectangle2.getArea() 10 >>>Rectangle2.getPerimeter() 14
-
idea里边创建类的时候和方法自动生成注释
2022-01-11 14:25:131、创建类的时候自动加上注释 首先在idea里边选择file——setting根据如图所示进行操作 在includes里边的添加注释配置 /** * @Author liwenyan * @Date ${DATE} ${TIME} * @PackageName.我们经常写代码的时候需要在类上编写注释,标明这个类是谁写的有什么作用,其实每次写都会发现有很多相同的字段,比如作者,创建时间,类名等,有的时候方法上也要标明方法的返回值,参数等信息,在idea里边我们可以给设置自动加载注释。
1、创建类的时候自动加上注释
首先在idea里边选择file——setting根据如图所示进行操作
在includes里边的添加注释配置
/** * @Author liwenyan * @Date ${DATE} ${TIME} * @PackageName:${PACKAGE_NAME} * @ClassName: ${NAME} * @Description: TODO * @Version 1.0 */
点击apply,这里就配置成功了,点击ok就退出配置页面了,所以我就先apply一下,配置完方法注解再去进行测试,如果你退出去了也没事,原路找回来就行
2、在方法上添加注解(File–>Settings–>Editor–>Live Templates)
点击右上角的加号新建Template Group
自己可以随意命名一个名字
然后选中新建的这个组,然后点击右上角+号,选择Live Template
IDEA还没有智能到自动为我们创建方法注释,这就是要我们手动为方法添加注释,使用Eclipse时我们生成注释的习惯是/**+Enter,这里我们也按照这种习惯来设置IDEA的方法注释
按照下图填入信息,我个人理解为*为一个触发器的存在,啊哈哈哈哈
/* * * $VAR1$ $params$* @return $returns$ * @author lwy * @creed: Talk is cheap,show me the code * @date $date$ $time$ */
当然这并不是所有人都是这样的,你可以选择你自己需要的参数留着
同样的方式再创建一个方法注解
/* * * $VAR1$ $params$* @return $returns$ * @author lwy * @creed: Talk is cheap,show me the code * @date $date$ $time$ */
其实这个还不是很智能的有些脚本还是需要自己去写的,可能你也看到有其他的博主写的很复杂,我之前看的时候也没怎么看明白,后来就找了简单的操作,可以供正常使用,选择如图所示的位置
配置一下VAR1(直接复制过去就可以)
groovyScript(" def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) { if(i!=0)result+= ' * '; result+='@param ' + params[i] + ((i < (params.size() - 1)) ? '\\n' + '\\t' : ''); }; return result", methodParameters())
选择ok,这样我们配置就结束了,就可以去进行测试操作了。
首先我们先创建一个测试类,发现自动生成了
接下来写个方法,方法上/**回车
至此配置成功
-
Java反射的原理及反射创建类实例的三种方式
2020-04-21 20:03:19JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。... -
Java采用接口方式创建类的对象
2020-11-27 17:47:15采用接口方式创建类的对象 与用类创建类的对象的方式相似,只是将第一个类名改为接口名。 若有 类student 接口Person 类student实现Person 即class student implements Person 则用类创建类的对象为 student s1=... -
idea在创建类时自动生成作者信息
2021-12-02 15:05:43第一步:File》Setting 第二步:找到Editor 》 然后找到File and Code Templates 》之后再找到...大功告成,参考idea中创建Java类时,自动在文件头中添加作者和创建时间_清风自来-CSDN博客_idea设置创建类的作者 ... -
关于python创建类的深入理解
2018-01-25 15:45:07元类的主要目的就是为了当创建类时能够自动地改变类. 通常, 你会为API做这样的事情, 你希望可以创建符合当前上下文的类. 假想一个很傻的例子, 你决定在你的模块里所有的类的属性都应该是大写形式。 有好几种... -
idea设置创建类时,自动添加创建者和创建时间等信息
2019-07-03 13:58:17一、打开File > Settings... 二、设置并apply 三、创建类,即可看到效果 -
JS创建类和对象
2018-07-08 17:31:34JavaScript 创建类/对象的几种方式在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的。JS对象是一种复合类型,它允许... -
Typescript如何动态创建类?
2020-01-08 13:47:31如何动态创建Typescript类?前言思路图代码User 如何动态的创建class (调用示例)ProxyClass 实现一个代理类(具体实现)Storage 实现不同的class存放(具体实现)注意 前言 想做一个工厂模式,之前写JAVA的时候... -
创建类的数组
2019-05-16 16:03:57今天做的一道题要创建类(类名为id)的数组,开始时只写了 id[] ID=new id[10]; 结果运行时一直出错,后来想了想发现正确的格式应为 id[] ID=new id[10]; for(int i;i<10;i++) ID[i]=new id(); ... -
python之创建类的两种方法
2018-08-22 19:33:21创建类第一种普遍方式可能都清楚,用class关键字: #第一种方法创建类 class A(object): def __init__(self, name): self.name = name f = A("lkk") 这样就简单完成了一个A类的创建,我们尝试打印... -
pycharm快速创建类和成员
2019-06-25 14:41:27利用Pycharm编辑器自动生成代码,首先需要“变量” 1)Pycharm编辑器功能之代码自动生成 https://blog.csdn.net/u013088062/article/details/50251413 2)写个变量,然后Alt+Return就会跳出右键快捷菜单 ... -
C++创建类对象的两种方法(Qt)
2020-06-09 10:35:18在Qt中创建类 1.直接创建类对象 类名+对象名; 对象名.方法(); 注意:如果需要在一个类中使用另一个类的函数;在类的头文件中 加上 "class 待引用类名 "。 2.如果需要在类之间传递一些指针,函数之类的。 头文件:... -
scala的创建类和对象
2020-02-11 17:11:59创建类和对象 用法 使用class来定义一个类 使用new来创建对象 示例 创建一个Person类,并创建它的对象 步骤 创建一个scala项目,并创建一个Object 添加main方法 创建类和对象 实现 在IDEA中创建项目,并创建一个... -
IDEA创建类时添加类注释,已有的类补充类注释(详细)
2018-11-18 17:59:35IDEA创建类时添加类注释 已有的类补充类注释 -
IntelliJ IDEA 创建类时自动添加注释创建方法时快速添加注释
2020-06-12 16:12:441.创建类时自动添加注释 打开IDEA后在 文件-设置-编辑器-文件和代码模板 英文状态下 File-settings-Editor-File and CodeTemplates 注:以下有两种方式,用一种方式即可,如果两种都添加,类中会出现两次注释内容 第... -
C++创建类的对象的两种方法
2019-12-24 10:59:19创建类 现有一个学生类Student,它的定义如下: class Student{ private: char *name; int age; float score; }; 常见的C++创建类的对象的两种方法如下: 第一种: Student stu; stu.name = “xiaoming”... -
在main方法中创建类对象
2020-04-28 11:31:56根据上个练习中长方形类...️创建一个长方形对象,设置其长度为5,宽度为4,输出该长方形对象的周长,再修改该长方形对象的宽度为3,输出该长方形的面积。请自定义一个类,在该类的main方法中实现上述要求的功能。 ... -
vuejs创建类
2017-10-12 18:25:42创建类 song.jsexport default class Song{ constructor({id,mid,singer,name,album,duration,image,url}){ this.id = id this.mid = mid this.singer = singer this.name = name -
IDEA创建类和方法时时自动生成注释(详细不能再详细)
2020-04-24 18:41:55注释除了自己看,以及他人看着方便清晰之外,以后生成文档的时候也发挥这重要的作用,那么我们来说一下IDEA创建类和方法时自动生成注释,我的博客,都是由本人亲测,尽量写的通俗易懂,或不多说,上步骤 1.创建类时... -
idea 工具如何创建类
2018-07-17 21:51:03安装完成后点击new没有发现 Java Class; 点击Mark Directory as ->source Root即可,下图为点击完成后; 点击完成后,继续点击new-&...Java Class,填写类的名字,选择类型为Class; ... -
C# 创建类的对象数组
2019-02-12 22:52:32using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;...namespace _0606_创建类的对象数组 { class Program { static void Main(string... -
idea创建类时自动添加注释
2018-07-31 10:14:46我们创建一个新的Java时,可能要在上面记录下日期,时间,描述。这个时候,我们可以使用快捷键:ctrl+al+s。直接进入到setting里面,进入Editor,然后进入File and code templates,点击includes,点击+号,新建一个... -
python中创建类属性
2016-11-13 20:21:02python中创建类属性 类是模板,而实例则是根据类创建的对象。 绑定在一个实例上的属性不会影响其他实例,但是,类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问... -
Java创建类的实例的几种方法
2018-09-06 11:04:28(2)运用反射手段,调用Java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。 (3)调用对象的clone()方法 (4)运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()... -
IDEA创建类模板和方法模板(超详细)
2018-08-16 23:54:55创建类模板 按照顺序打开File–>settings–>Editor–>File and Code Templates–>Includes 输入类注释模板 /** * @Classname ${NAME} * @Description TODO * @Date $... -
IDEA 创建类是自动添加注释和创建方法时快速添加注释
2019-03-15 18:49:471.创建类是自动添加注释 /** * @Author: HWB * @DateTime: ${DATE} ${TIME} * @Description: TODO */ 2. 创建方法时快速添加注释 2.1 新建一个分组 2.2 创建一个Live Template 2.3 配置刚创建的LIve ... -
java中创建类对象的各种方法
2018-01-18 00:15:50最近听朋友提起面试题的时候,在加上整理复习汇总java基础知识,刚好写下来记录创建java对象的方法,又称为java类的实例化,有很多种,列举如下:一、使用Spring管理创建学过Spring框架的同学都知道,我们可以利用...