python 对比学习

python和java面向对象的不同

1.属性和方法

java中类的属性(static)除外,对象全部独立拥有;

而python中类的属性,其实例对象一个字段都没有.底层是这么搞的: 对象object获取属性时,如果自己没有并不报错,而是去类中找,找不到才报错.

方法和java一样,普通的方法是对象的,要申明为类的静态方法必须使用@classmethod来表示是类的静态变量

2.构造方法:

java可以有多个,更加参数的多少决定

而python没有方法重载,故没有多个构造方法

一。小知识点:

1.python没有contains,使用find返回查到的元素的位置(只查一个符合的)

2.python的数组和集合添加元素不是add,使用append(快速构建list可是使用range(10) = [0,1,2,3,4,5,6,7,8,9])

3.python的set添加元素add,删除元素remove(和java一样)

4.fn(*x) x表示一个tuple; 而 fn(**x) x表示一个字典,而且对该字典you要求,key必须为str,同时fn(**x)还有个特殊写法,直接给x=xxx,y=xxx,简直太牛逼了。

5.高阶函数一般用这种log('info'),包含了一个参数的装饰器。 首先不带参数的装饰器(2阶即可):

第一阶:修饰的形参函数, 第二阶:函数的参数

def log1(fn): #fn:装饰的函数
  def wapper(*args,**kw): #fn的参数
    print 'log1日志:'
    return fn(*args, **kw)
   return wapper

@log1
def mytest(**kw):
  sys.stdout.write('mytest函数执行,参数为:')
  for x,y in kw.items():
  sys.stdout.write(str(x) + ':' + str(y) + ', ')

但是如果包含了参数的,则需要三阶。  第一阶:装饰器所带参数作为形参,第二阶:修饰的形参函数, 第三阶:函数的参数

def log(txt):#一阶txt是自己的参数
  def wapper(fn): #二阶这里拿到装饰函数的形参fn
    def wapper2(*args,**kw): #三阶拿到装饰函数的参数
      sys.stdout.write(txt+'级别日志:')
      return fn(*args, **kw)
    return wapper2
  return wapper

@log('info')
def test(**kw):
  sys.stdout.write('test函数执行,参数为:')
  for x,y in kw.items():
    sys.stdout.write(str(x) + ':' + str(y) + ', ')

test(x=1,y=2)

6.django总update和insert都可以通过save方法实现,到底是insert还是update,默认通过主键是否有值来判断。 如果我们确认只需要insert,则使用 对象.save(force_insert=true,using='哪个数据库');

如果我们确认只需要update,则使用 对象.save(force_update=True,update_fields=['aaa','bbb'])

posted @ 2019-03-22 19:14  NewObject_1  阅读(337)  评论(0编辑  收藏  举报