茫茫宇宙 皆为物体

茫茫宇宙皆为物体

今天编者带领大家找一些区别,给一个鲜明的认识。

面向对象,是一种思想。简单说就是:一切皆对象。我们吃饭,做事可以用方法代替。有点抽象,还是用代码来说一下。

类和方法:

本文给出Person类,说到俗一点就是我用Person class来实现人这种物体的某些特征和行为。

姓名和年龄是人都拥有的,说到专业点就是属性,所谓变量。那个info就是方法,就是人所拥有的行为。

public classPerson {

Stringname;

Integerage;

Python的代码如下,看起来明显简单多了,是不是少了不少标点符号啊!def是个关键字定义函数或进程用的。

classPerson:

name ='无名氏'

age =

definfo(self):

print("这是Person类的info方法")

print(" ---->%s已经%d岁了!"%(self.name,self.age))

构造函数:

这听起来很抽象,但在OOP中是非常重要的。简单的思考是个初始化的作用,那初始化干嘛呢?开辟空间啊。没空间怎么储存数据呢?

如下所示:java代码,给出了构造函数,必须和类同名哟!一个无参数,一个有参数。

Person()

{

name="无名氏";

age=00;

}

Person(String name,Integer age)

{

this.name= name;

this.age= age;

}

如下所示,新建对象person,来进行代码测试。

Person person =newPerson();

person.info();

//有参数构造函数测试

Person person1 =newPerson("吴西林",20);

person1.info();

结果如下:

这是Person类的info方法

---->无名氏已经岁了!

这是Person类的info方法

---->吴西林已经20岁了!

分析可知,无参数的时候,可以取用默认参数,那python会如何呢?

name ='无名氏'

age =

area =''

def__init__(self,name,age):

self.name = name

self.age = age

这个__init__是个新玩意,这是个内建方法,专门初始化用的,self理解比较复杂,感兴趣的可以自行查资料。

现在进行测试:

p =Person();

p.info()

p1= Person("吴西林",20)

p1.info()

结果是报错,TypeError: __init__() missing 2required positional arguments: 'name' and 'age'

小编故意这样写,目的强调这一点。

这样就可以解决了def__init__(self,name='无名氏',age =):

这是个细节问题。

哇塞,分析java和Python,易知Python很容易理解,初始化,我就写在“初始化”函数中,java可不是这样的。

继承:

继承也算是OOP三大特性之一了,java继承利用的是extends关键字,如果调用父类的方法,可以用super来实现。本文给出,两个子类:Teacher和Doctor。

packagewmy.example;

public classDoctorextendsPerson {

Stringhospital;

Doctor()

{

}

Doctor(String name,Integer age,Stringhospital)

{

this.name= name;

this.age= age;

this.hospital= hospital;

}

voidinfo()

{

System.out.println("这是Doctor类的info方法");

super.info();// vital

System.out.println(name+"就职于"+hospital+"...");

}

voidstatic_teacher_info()

{

}

}

接下来看一下python的继承,同样两个类,代码如下:

classTeacher(Person):

def__init__(self,name,age,school):

Person.__init__(self,name,age)

self.school = school

definfo(self):

print("这是Teacher类的info方法")

Person.info(self)

print('%s就职于%s'%(self.name,self.school))

classDoctor(Person):

def__init__(self,name,age,medicine):

Person.__init__(self,name,age)

self.medicine = medicine

definfo(self):

print("这是Doctor类的info方法")

Person.display_info(self)

print('%s就职于%s'%(self.name,self.medicine))

继承一个括号搞定。真的好绝!Person.info(self)比起来super,是不是很清晰明了。

多态:

多态是把利器,也是个难点。可以通过以下代码实现:

person = teacher;

person.info();

person = doctor;

person.info();

结果如下:很显然,调用的都是info,可实现的结果不一样。这就是多态。

这是Teacher类的info方法

这是Person类的info方法

---->钟馗已经50岁了!

钟馗就职于背田大学...

这是Doctor类的info方法

这是Person类的info方法

---->王刚已经34岁了!

王刚就职于封神医院...

对于Python并没有多态,可以通过传递对象来实现。关键代码如下:

@staticmethod

defif_info(obj):

obj.info()

p = Person()

#

t = Teacher('钟馗',50,'背田大学')

d = Doctor('王刚',34,'封神医院')

p.if_info(t)

p.if_info(d)

综上所述,Python确实是比较优秀的。语言非常简练。但并不是JAVA就一定很差。

Python并没有静态变量和多态的概念。有读者可能会问静态函数,接口怎么没有说,笔者只是抛砖引玉而已。

想一想Python变量有类型没?

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180123G0ENQU00?refer=cp_1026

扫码关注云+社区