茫茫宇宙皆为物体
今天编者带领大家找一些区别,给一个鲜明的认识。
面向对象,是一种思想。简单说就是:一切皆对象。我们吃饭,做事可以用方法代替。有点抽象,还是用代码来说一下。
类和方法:
本文给出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变量有类型没?
领取专属 10元无门槛券
私享最新 技术干货