类和面向对象

简介:

类其实说通俗一点就是一个工厂,这个工厂是生产一些具有相同属性,而且有部分共同功能方法的物体,这里我就称它为工厂。

比如我们现在有一个工厂,工厂可以生产杯子,其中有大杯,小杯,隔热杯和不隔热杯。这些杯子有相同的属性就是它们都是杯子,有相同的功能就是都可以装水,它们不同的属性就是有的杯子大,有的杯子小,有不一样的功能就是隔热和不隔热,那么我们就称,工厂就是类,而真实存在的杯子就是对象。要先有工厂才有杯子也就是说要先有类才有对象。对象是由类产生的,下面说一下类的定义 

1
2
3
class  class_name:
#属性
#方法

对象的产生

1
name  =  class_name

其中属性是大家都共同拥有的,但它是可以改变的。方法除了一些特殊的以外,是共用的。

1
2
3
4
5
6
7
8
9
class  Cat:
     #属性
     #方法
     def  eat( self ):
         print ( "猫在吃鱼..." )
     def  drink( self ):
         print ( "猫在喝可乐..." )
tom  =  Cat()
tom.eat()

上面代码中就定义了一个类Cat,还定义了两个方法drink和eat

第八行代码的意思是说让工厂Cat(类)生产一个tom的猫(对象),第九行代码就是去调用eat方法。

下面说一下属性的定义。

一般属性是定义在一个叫做__init__的方法里面的,这个init的意思就是初始化的意思,也就是说,这只猫刚刚被生产出来的时候就具备有这个的属性,不过这个属性是可以通过后天改变的。下面我们看看怎么定义属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class  Cat:
     #属性
     def  __init__( self , new_name, new_age):
         self .name  =  new_name
         self .age  =  new_age
     #方法
     def  eat( self ):
         print ( "猫在吃鱼..." )
     def  drink( self ):
         print ( "猫在喝可乐..." )
     def  introduce( self ):
         print ( "%s的年龄是%d" % ( self .name, self .age))
tom  =  Cat( 'littlecat' , 40 )
tom.introduce()
print (tom.name)
print (tom.age)

其中,__init__方法就是定义属性的方法,通过__init__方法可以看到这个方法需要三个参数,所以在生成对象的时候要传入三个参数,可是为什么我们在13行代码中,只传递两个参数呢,因为self这个参数是指对象本身,比如十三行代码中,我们生成的对象是tom,那么self就是tom,也就是说,如果你想调用tom里面的self.name变量的时候,就可以写成这样tom.name。而new_name对应的就是我们传入的十八行代码中传入的第一个参数littlecat,所以new_name就等于littlecat,new_age就是40。你把上面的代码执行一下你就知道了。

下面再说一个方法__str__,我们可以先来看一个例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class  Cat:
     #属性
     def  __init__( self , new_name, new_age):
         self .name  =  new_name
         self .age  =  new_age
     #方法
     def  eat( self ):
         print ( "猫在吃鱼..." )
     def  drink( self ):
         print ( "猫在喝可乐..." )
     def  introduce( self ):
         print ( "%s的年龄是%d" % ( self .name, self .age))
tom  =  Cat( 'littlecat' , 40 )
print (tom)

打印出来的tom的信息其实就是tom这个对象在系统中放在的内存地址。这个我们看不懂呀。那怎么办,如果你想打印出tom的时候,是让tom输出自己的信息,应该怎么做呢,可以看下面这个函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class  Cat:
     #属性
     def  __init__( self , new_name, new_age):
         self .name  =  new_name
         self .age  =  new_age
     #方法
     def  eat( self ):
         print ( "猫在吃鱼..." )
     def  drink( self ):
         print ( "猫在喝可乐..." )
     def  introduce( self ):
         print ( "%s的年龄是%d" % ( self .name, self .age))
     def  __str__( self ):
         return  "%s今年大概是%d" % ( self .name, self .age)
tom  =  Cat( 'littlecat' , 40 )
print (tom)

__str__函数其实就是一个描述信息的方法,这个方法在我们去打印一个对象的时候,它就会返回__str__方法里面的返回信息。不过有一点要注意一下就是__str__方法一定要有return



本文转自 周子琪 51CTO博客,原文链接:http://blog.51cto.com/izhouyu/1969590

相关文章
|
7月前
|
算法 Java 编译器
类和面向对象
类和面向对象
67 0
|
6月前
|
存储 算法 Java
面向对象编程实践:类、对象与继承
面向对象编程实践:类、对象与继承
34 0
|
7月前
|
存储 数据安全/隐私保护 Python
面向对象编程(OOP):理解类、封装性的关键概念
面向对象编程(OOP):理解类、封装性的关键概念
73 0
面向对象的封装,继承,多态(一)
面向对象的封装,继承,多态。
63 0
面向对象的封装,继承,多态(一)
|
SQL 安全 数据库
对面向对象继承的一些思考
本文浅谈对面向对象继承的一些思考
103 0
对面向对象继承的一些思考
|
Java
Java面向对象程序设计4继承与多态
Java面向对象程序设计4继承与多态
445 0
|
存储 Go Python
面向对象与类
面向对象与类
99 0
面向对象与类