第十六课 类和对象

第十六课 类和对象

一.
对象:就是把数据与功能整合在一起,即一个盛放数据与功能的容器

类: 即类别种类,是面向对象分析和设计的基石,对象是类的实例,可以把同一类对象相同的数据与功能存放到类里,而无需每个对象都重复存
一份,每个对象里只需存自己独有的数据即可,极大地节省了空间。


在程序中,必须要事先定义类,然后再调用类产生对象(调用类拿到的返回值就是对象)

类的定义:
    class Turle():   //定义一个类,首字母要大写,定义一个函数首字母小写
 eg:

class Person:
    name = 'tjc'
    def printName(self):
        print(self.name)
        
类的创建语法:
class  类名(继承列表)
   实例方法定义
   类变量定义
   类方方法
   静态方法


实例方法:
语法:
class 类名(继承列表)
       def 实例方法名(self,形式参数1,形式参数2,)
       语句
实例方法如果没有return语句,则返回none

实例方法的调用语法:
   实力.实例方法名(调用参数)

  
类中定义的函数一般都至少有一个参数,且一般叫self
1.self代表的是传入一个类的对象,一般类的函数都是给对象用的,因此函数需要知道调用我这个函数的到底是那个对象,因为函数中可能会用到对象的一些特有属性
2.如果类中定义的函数没有参数,那么该函数只能被类调用,不能被对象调用。
3.绑定方法,据说有了这个参数,Python 再也不会傻傻分不清是哪个对象在调用方法了,你可以认为方法中的 self 其实就是实例对象的唯一标志


构造方法:
作用:
      创建对象时初始化实例变量
语法:
    def _init_(self[,形式参数列表]):
         语句...
说明:
   1.构造方法名必须为_init_ 不可改变
   2.在一个类中只能有一个_init_构造方法
   3.构造方法如果没有return 语句,则会返回self自身


析构方法:
   class 类名:
          _del_(self):
            pass
析构方法会在对象被销毁是被自动删除

类变量
   1.是指再类class内定义的变量,此变量属于类,不属于此类的对象
   2.类变量可以通过该类直接使用也可以用过该类的实例直接访问
 例:
class Human:
       home = '地球'     //这里就是再类里面定义的 不是再函数里面定义的 
       def _init_(self,name):
             self.name = name
二.
 我们不希望对象的属性或方法被外部直接引用,我们可以在属性或方法名字前边加上双下划线,这样子从外部是无法直接访问到,会显示AttributeError错误
eg:
>>> class Person:

__name = '小甲鱼'

       def getName(self):

                return self.__name


>>> p = Person()

>>> p.__name

Traceback (most recent call last):

  File "<pyshell#56>", line 1, in <module>

    p.__name

AttributeError: 'Person' object has no attribute '__name'

>>> p.getName()

'小甲鱼'

我们把getName方法称之为“访问器”。Python事实上是采用一种叫“name mangling”技术,将以双下划线开头的变量名巧妙的改了个名字而已,我们仍然可以在外部通过“_类名__变量名”的方式访问:n%_]r#*ck


>>> p._Person__name'小甲鱼'

三.
封装
作用:
    是指隐藏细节,让使用者不关心这些细节。
注:
python的封装是假的(模拟的)封装

私有实例变量和方法
   python类中,一双下划线‘__’开头,不以双下划线结尾的标识符为私有成员
   私有成员分为:
            私有属性和私有方法
            私有成员在子类和类外部无法访问
示例:
class A:
        def __init__(self,args):
              self.__p = args                //私有成员
        def__private_method(self):    //私有方法
              print('')
        def showA(self):                    //公开方法 
              print('self.__p=',self.__p)
              self.__private_method()

 

继承
单继承的语法:

class 子类(父类)
......

法一:调用未绑定的父类的方法
class 子类(父类)
    父类的名字.父类中的函数名(self)
    ......
法二:使用super函数
class 子类(父类)
    super().函数名() // 不用self
    ........


子类可以继承/遗传父类所有的属性,因而继承可以用来解决类与类之间的代码重用性问题

多重继承:

class 子类(父类一,父类二,父类三)
         ..........
多态  polymorphic
什么是多态:
    字面意识:“多种状态”

覆盖 override(也叫重写 overwrite)
什么是覆盖 
     覆盖是指有继承关系的类中,子类中实现了与基类同名的方法,在子类实例调用的是子类中的覆盖版本,这种现在叫做覆盖

子类对象显示调用基类方法的方式:
      基类名.方法名(实例,参数)


四.组合
把类的实例化放到新类里
eg:

class Turtle:
       def _init_(self,x)
             self.num= x
class  Fish:
        def _init_(self,x)
              self_num=x
class Pool:
        def _intit_(self,x, y)
              self.turtle = Turtle(x)        // 把乌龟类实例化给变量self.turtle
              self.fish = Fish(y)             // 把鱼类实例化给变量self.fish
         def print('水池里一共有%d 只乌龟,%d条鱼'%(self.turtle.num,self.fish.num))


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值