python中的oop

来源:互联网 发布:央视 数据新闻 编辑:程序博客网 时间:2024/05/11 18:04

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=10MyClass.func(myclass)MyClass.var=1000MyClass.func(myclass)myclass1=MyClass()myclass1.func()myclass1.foo=100MyClass.func(myclass1)
打印:0 --- 010 --- 010 --- 10000 --- 1000100 --- 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__,查看方法或者数据属性


	
				
		
原创粉丝点击