Python中类、对象与self详解

先介绍一下python中的类与对象/实例。然后详细说明self。说明:对象等同实例,本文称呼不一致时请自行统一

【一】类与对象/实例

1、类

  (1)类由名称、属性、方法三部分组成

  (2)类是抽象模板,比如学生,汽车可以用Student、Car类来表示

  (3)类命名规范:数字、字母、下划线,数字不能开头;要驼峰式命名

  (4)定义类:

    第一种:class 类名:(冒号缩进,代码块内含属性与方法)

    第二种:class 类名(object):(--(Object)表示该类从哪个类继承下来的,Object类是所有类都会继承的类。--)

#子类继承父类
class Parent:
    def pprt(self):
        print(self)

class Child(Parent):    #表示子类从父类继承
    def cprt(self):
        print(self)
c = Child()
c.cprt()        # Child类的实例
c.pprt()        #self指的是Child类的实例,父类Parent中定义了pprt()方法
p = Parent()
p.pprt()    # Parent类的实例

  (5)关于self:类函数需要定义一个‘self’,不用理会不需要赋值;self不是py关键字,但是必填;self可以用其他参数替代,如“this、a”,只是约定俗称

  (6)如下图:p.sayhello() ,实际上Python解释成Person.sayhello(p),也就是说把self替换成类的实例

# 实例说明self代表是是对象/实例本身,而非类本身(类中包含多个对象)
#
self不必非写成self,可以其它参数代替,只是约定俗成,但必须写
class Person: def sayhello(self): print(self) print('***********分割线*************') print('My name is:linda') p=Person() p.sayhello() #等同:Person.sayhello(p)
# 如果我们的定义和调用时均不传类实例是可以的,这就是类方法
class Person:
    def sayhello():
        print()
        print('***********分割线*************')
        print('My name is:linda')
p=Person()
Person.sayhello()   # 定义和调用均不传类实例 

2、对象/实例

  (1)对象是由类 创建出来的实体,对象也称实例

  (2)对象要从类中继承方法,具有类里面所有属性和方法的使用权限

  (3)创建方式:对象名 = 类()   ---如: tom = Person()

class Person:
    def sayhello(self):
        print(self)
        print('***********分割线*************')
        print('My name is:linda')
p=Person()

3、__init__方法: ---也叫 初始化方法

    类中定义了__init__方法,则表示在创建对象时系统会默认调用此方法,也叫初始化方法

      由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法__init__方法,例如在Person类时,把name、age等属性绑上去:

      

 

    说明:

    1、类在创建对象时就已经有默认的属性(如创建一辆汽车时就已经注定这个车子是什么品牌,有几个轮子等),所以类的属性一般定义在__init__方法中

    2、__init__方法在创建对象时候被调用,所以属性通过(对象 = Car(属性))传入方法中

    【注意点】(1)__init__方法的第一参数永远是self,表示self指向创建的类实例本身,因而,在__init__方法内部,可以把各种属性绑定到self,等同于绑定创建的实例本身

         (2)__init__方法 在创建实例时,不可传入空的参数,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去

         (3)如上图: self.name = name的意思就是把外部传来的参数name的值赋值给Person类自己的属性变量self.name

                        说明:self就是指类本身,self.name就是Person类的属性变量,是Person类所有。而name是外部传来的参数,不是Person类所自带的。

【二】self的详细说明

1、说明:

  (1)# 实例说明self代表是是对象/实例本身,而非类本身(类中可包含多个对象)

  (2)# self不必非写成self,可以其它参数代替,只是约定俗成,但必须写  

  (3)# 如果我们的定义和调用时均不传类实例也是可以的

    

2、关于类函数/类方法

  【?】类函数与普通函数的区别:

     仅在于类函数:第一参数永远是类的本身实例变量self,调用时,不用传递该参数     

  (1)方法,通俗点来说就是函数; ---把每一项类中所有的功能封装起来称为方法,一般方法里的内容就是方法的执行过程

     方法多具有执行性

     举例: 比如类表示的是People 也就是人 

               人的类中会有一些属性 这些属性大概是 身高、体重、姓名等等

               那么方法比如是 跑、吃、等等

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('我叫{0},我今年{1}岁'.format(self.name,self.age))   #我叫小明,我今年18岁

person=Person("小明",18)
person.name
person.age

      【说明】Person类实例本身拥有一些数据,那么要访问这些数据,就不需要从外面的函数去访问,可直接在Person类的内部定义访问数据的函数(方法),这样,就可以把”数据”封装起来。

          这些封装数据的函数是和Person类本身是关联起来的,称之为类的方法

          我们从外部看Person类,只需要知道,创建实例需要给出name和age。

          而如何打印,都是在Person类的内部定义的,这些数据和逻辑被封装起来了,调用很容易,但却不知道内部实现的细节。

          如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线,在Python中,实例的变量名如果以开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

          这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮

          (注意)Python中,变量名类似__xxx__的,也就是以双下划线开头,且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不可以这样命名

          

 

posted on 2018-10-22 18:22  暖暖_8023  阅读(1125)  评论(0编辑  收藏  举报

导航