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__,查看方法或者数据属性