Python中的面向对象编程详解

本文讲解了创建类、实例化类、类属性、特殊方法内建属性、静态变量属性、实例变量属性、方法属性、静态方法、类方法等内容。
创建类:Python中,使用 class 关键字来创建一个类。简单的类的声明可以是关键字后紧跟类名。
实例化:类名后跟一对圆括号实例化一个类。
类属性
python的属性与Java和C++等面向对象语言不同,python的属性既包括了数据成员还包括函数元素,通过句点符号来访问。
特殊数据内建属性
C.name 类C的名字(字符串)
C.doc 类C的文档字符串
C.bases 类C的所有父类构成的元组
C.dict 类C的属性
C.module 类C定义所在的模块(1.5 版本新增)
c.class 实例c对应的类

特殊方法内建属性
dir():获得类属性或者实例属性名字列表.
静态变量属性(也称为类变量):直接在class作用域定义(在函数外定义)
动态变量属性(也称为实例变量):python的实例属性与Java和C++等不同.在Java和C++中,实例属性必须首先声明/定义,而python实例属性是动态创建。
设置实例的属性可以在实例创建后任意时间进行,也可以在能够访问实例的代码中进行。构造器init()是设置这些属性的关键点之一。

def __init__(self, name, data):
    self.name = name
    self.data = "123'

注意:self类似Java的this关键字作用,它是一个指向自身实例的引用。。。
方法属性:分为实例方法和类方法.实例方法只属于一个实例;而类方法属于类,也属于实例.
静态方法:静态方法是类级别的方法,不需要实例化类就可以通过类名直接调用.有两种方法定义:

#1》装饰器(常用)
@staticmethod   
def foo():
    print 'call static method'
#2》内建函数
def foo():
    print 'call static method'
foo = staticmethod(foo) #静态方法

类方法:类方法是类级别的方法, 与静态方法不同的是,它必须显示传入cls类参数;
而且如果还需要调用类中其他的静态方法,或者类方法, 要定义成类方法.类方法也有两种方法定义:

#1》装饰器(常用)
@classmethod    
def bar(cls):
    print 'call class method and access static varible(staticVar): ', cls.staticVar
#2》内建函数
def bar(cls):
    print 'call class method and access static varible(staticVar): ', cls.staticVar
bar = classmethod(bar)  #类方法

实例详解(可以加很多断点,在debug模式下,一步一步查看程序的运行轨迹)

class Target(): #定义类Target
    'This is Target definition' #定义__doc__属性
    staticVar = 'v1.0'  #定义静态变量(类变量)
    def __init__(self, name = 'default', data = 0): #定义构造函数
        self.name = name    #实例变量
        self.data = data    #实例变量
        
    def main():
        print "this is a test function"
        
    #方法一:用装饰器定义静态方法
    @staticmethod   
    def func1():
        print 'call static method func1'
        
    def func2():
        print 'call static method func2'
    func2 = staticmethod(func2) #方法二:定义静态方法
    
    #方法一:用装饰器定义类方法
    @classmethod    
    def bar1(cls):
        print 'call class method bar1 and access static varible(staticVar):',cls.staticVar
         
    def bar2(cls):
        print 'call class method bar2 and access static varible(staticVar):',cls.staticVar
    bar2 = classmethod(bar2)  #方法二:定义类方法
 
    if __name__ == '__main__':
        main()
 
#实例化
target = Target('aaa', 123)
print 'name is: ', target.name
print 'data is: ', target.data
#打印__doc__属性
print 'Target.__doc__ is: ', Target.__doc__
print 'target.__doc__ is: ', target.__doc__
#打印类__dict__属性
print 'Target.__dict__ is: ', Target.__dict__
#打印实例__dict__属性
print 'target.__dict__ is:',target.__dict__
#打印静态变量
print 'staticVar is: ', Target.staticVar
#打印内建函数dir()
print 'dir(Target) is: ', dir(Target)
print 'dir(target) is: ', dir(target)
#调用静态方法
Target.func1()
Target.func2()
#调用类方法
Target.bar1()
Target.bar2()

输出:
this is a test function
name is: aaa
data is: 123
Target.doc is: This is Target definition
target.doc is: This is Target definition
Target.dict is: {‘bar1’: <classmethod object at 0x029EF390>, ‘func2’: <staticmethod object at 0x029EF370>, ‘module’: ‘main’, ‘bar2’: <classmethod object at 0x029EF3B0>, ‘func1’: <staticmethod object at 0x0298EB10>, ‘staticVar’: ‘v1.0’, ‘main’: <function main at 0x029E7D70>, ‘doc’: ‘This is Target definition’, ‘init’: <function init at 0x029E7D30>}
target.dict is: {‘data’: 123, ‘name’: ‘aaa’}
staticVar is: v1.0
dir(Target) is: [‘doc’, ‘init’, ‘module’, ‘bar1’, ‘bar2’, ‘func1’, ‘func2’, ‘main’, ‘staticVar’]
dir(target) is: [‘doc’, ‘init’, ‘module’, ‘bar1’, ‘bar2’, ‘data’, ‘func1’, ‘func2’, ‘main’, ‘name’, ‘staticVar’]
call static method func1
call static method func2
call class method bar1 and access static varible(staticVar): v1.0
call class method bar2 and access static varible(staticVar): v1.0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值