Python类

作为一个脚本语言,没想到也是面向对象的,今天看了一下Python的类,跟Java的大同小异,语法上很多不同,但是功能上大差不差,不多说,来看看

先看看关于面向对象的几个概念:

概念

  • 类(class) :封装一些变量和方法的一个对象的描述。实际就是包含了一些变量和方法。

  • 类变量:Python的类变量,相当于Java的类静态变量,类的所有对象共用的变量。

  • 实例变量:只能作用于当前类的实例的变量,对比于类变量,实例变量每一个类的实例对象都不同。

  • 对象:类的实例化就是一个对象。

实例

自己都觉得概念讲不清楚,还是看看实例易懂,直接上实例:

class Test(object):
    var = 'hello test'
    def __init__(self, arg):
        super(Test, self).__init__()
        self.arg = arg

    def f1(self):
        print('f1')

test = Test('test')
print('test.arg = '+test.arg)
print('Test.arg = '+Test.var)
print('test.var = '+test.var)
Test.f1(test)
test.f1()

输出为:
test.arg = test
Test.arg = hello test
test.var = hello test
f1
f1

在此解释一下
Test就是类,test就是Test类的实例。
var就是类变量,直接用Test类名就能调用,也能用test实例调用
arg就是实例变量,是能实例test调用。

f1是有参数(self)的,所以是实例方法,可以实例调用,也可以类名调用,但是要传入一个实例对象参数
如果f1是一个不带参数的函数,那么只能类名调用,实例不能调用,实例调用默认传入了一个实例对象的参数,这点对比Java来说是不同的,对于一个Java出身来说,还真他妈的不习惯

__init__(self, arg):这是一个构造方法,self是对象自己,arg就是参数。

当类实例化是,也就是当执行test = Test('test')时,构造函数会自动调用

self并不是关键字,可以用其他的关键字替代,重要的是函数的第一个参数,它一定是对象自己,self只是用这习惯而已。

继承

Python也是可以类继承类的,并且还可以多继承。
单继承:例子中class Test(object):就代表Test类继承了object类
多继承:class Test2(Test,Test1):就代表了Test2继承了Test,Test1,当Test,Test1中有相同的变量,函数是,如果没有被子类Test2复写,那么会默认执行第一个继承的类Test的变量或者函数,切记。

类属性与方法

__fun1():双下划线开头的,是类的私有属性,外面不能直接调用的,只能类的内部用self.__fun1()调用。

但是想如下的专有方法,也是__开头的,__init__确可以类外面调用,其他的好像又不行,这是奇葩了,与是我们不得不记住这些个专有的函数。
其中比较重要的两个init,del,当构造时,a = A(),del a时,会执行这两个方法。其他的方法我也没弄清楚什么时候执行,下次专门去查查,介绍介绍。

类的专有方法:
__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__div__: 除运算
__mod__: 求余运算
__pow__: 称方

大家注意了没有,继承时的构造函数,可以super(Test, self).__init__()
去调用,也可以object.__init__(self)调用,那这两种方法有什么区别呢?

  • 单继承时super()和init()实现的功能是基本一样的
class Base(object):
    def __init__(self):
        print ('Base create')
class A(Base):
    def __init__(self):
        print ('creat A ')
        Base.__init__(self)
class B(Base):
    def __init__(self):
        print ('creat B ')
        super(B, self).__init__()
base = Base()
a = A()
b = B()

这段代码的输出:
Base create
creat A
Base create
creat B
Base create

想知道其中的区别,请期待明天的学习笔记。。。实际上是今天太晚了,身体重要啊

部分知识来自博客:http://www.pythontab.com/html/2016/pythonjichu_1205/1108.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值