python中的oop

1. 要分清楚“类”和“实例”,类和实例都是一种类型

class MyClass:    //定义一个类
    'define a class' 
    foo=0		//定义一个static变量
    def func(self):	//定义一个static 的方法
        print self.foo
classinstance=MyClass() //创建一个实例
print type(myclass)
print type(MyClass)
打印:

<type 'instance'>
<type 'classobj'>


2.方法(python中不能重载)

myclass=MyClass() //创建一个实例
myclass.func() //调用类中的一个方法
MyClass.func(myclass) //另一种调用类中的方法


3.类中的变量

class MyClass:
    'define a class'
    foo=0
    var=0
    def func(self):
        print self.foo,'---',self.var
        
myclass=MyClass()
myclass.func()
myclass.foo=10
MyClass.func(myclass)
MyClass.var=1000
MyClass.func(myclass)


myclass1=MyClass()
myclass1.func()
myclass1.foo=100
MyClass.func(myclass1)
打印:
0 --- 0
10 --- 0
10 --- 1000
0 --- 1000
100 --- 1000

4.类的构造函数和析构函数

    def __init__(self,foo,var='1111'):
        self.foo=foo
        self.var=var

其中析构函数一般不用:__del__


5.继承(可以多继承)

class OtherClass(MyClass):
    var2=0
    def __init__(self,foo,var):
        MyClass.__init__(self, foo, var)
        self.var2='111111111111'
    def otherfunc(self):
        self.func()
        print self.var2

总结:在class定义中的都是静态变量,如果用MyClass.var=10这样的方式可以修改类中的静态变量。

需要要在实例添加实例的成员变量,可以用myclass.foo=1000 这样就会添加一个foo的成员变量,修改myclass实例中的成员变量foo不会影响这个类的其他实例,如果这个类中原来就有foo 的静态变量,也不会影响。

用某一个实例.一个成员变量,如果这个成员变量没有在这个实例中,这个动作将会添加一个成员变量到这个实例中,同时在class类中的函数中也可以通过self.一个成员变量  添加一个成员到某个实例中。

class MyClass:
    'define a class'
    foo=0
    var=0
    def __init__(self,foo,var='1111'):
        self.foo=foo
        self.var=var

    def func(self):
        var4=90000000
        print self.foo,'---',self.var,'----',var4
        
myclass=MyClass('sun',190)
myclass.func()
print myclass.var4 #这句话不对,因为没有var4变量,如果在fuc函数中将var4前面添加self. 就可以了,因为self.一个变量,会将这个变量添加到该实例中,但是上面程序中的var4就是一个普通的临时变量

类中的特殊属性比较后面都实例的特殊属性:

__name__ : 类的字符串名字

__doc__:  类的文档字符串

__bases__: 类的父亲表列

__dict__: 类的属性  这个重要

__module__:对类进行定义的模块


print '__name__: '+str(MyClass.__name__)
print '__doc__: '+str(MyClass.__doc__)
print '__bases__: '+str(MyClass.__bases__)
print '__dict__: '+str(MyClass.__dict__)
print '__module__: '+str(MyClass.__module__)
print dir(MyClass)  打印类属性
myclass.func()
print dir(myclass)  打印实例属性


打印:

__name__: MyClass__doc__: define a class__bases__: ()__dict__: {'__module__': '__main__', 'func': <function func at 0x00BA0570>, 'var': 0, 'foo': 0, '__doc__': 'define a class', '__init__': <function __init__ at 0x00BA05B0>}__module__: __main__(<class __main__.MyClass at 0x00ACA510>,)

['__doc__', '__init__', '__module__', 'foo', 'func', 'var']sun --- 190 ---- 90000000['__doc__', '__init__', '__module__', 'foo', 'func', 'var', 'var4'] //这里为什么多多一个var4,因为在func中添加了一个成员变量

实例的特殊属性:

__class__: 实例化出这个实例的类

__dict__: 实例的属性

print myclass.__class__
print myclass.__dict__


打印:

__main__.MyClass  类的名称
{'var': 190, 'foo': 'sun'} 实例中的属性


内建类型的属性:

内建类型不想类和实例一样有属性字典__dict__,python中内建类型有两个特殊的属性__methods__和__members__,查看方法或者数据属性







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值