美文网首页
Mr.Li--python-动态语言

Mr.Li--python-动态语言

作者: 界面大叔 | 来源:发表于2017-06-06 20:10 被阅读0次

    定义:

    动态编程语言是高级程序设计语言的一个类别,它是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力

    给对象添加属性,给类添加属性,给类添加方法,删除属性.

    删除的方法:

    1.del对象.属性名

    2.delattr(对象, "属性名")

    动态语言可以在运行的过程中,修改代码.

    静态语言:编译时已经确定好代码,运行过程中不能修改

    如果想要限制属性,可以用__slots__变量,限制类市里能添加的属性

    ·__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的


    元类:

    动态创建类:

    使用type创建带有属性和方法的类:

    In [46]:defecho_bar(self):#定义了一个普通的函数

    ...:print(self.bar)

    ...:

    In [47]: FooChild = type('FooChild', (Foo,), {'echo_bar': echo_bar})#让FooChild类中的echo_bar属性,指向了上面定义的函数

    In [48]: hasattr(Foo,'echo_bar')#判断Foo类中,是否有echo_bar这个属性

    Out[48]:False

    In [49]:

    In [49]: hasattr(FooChild,'echo_bar')#判断FooChild类中,是否有echo_bar这个属性

    Out[49]:True

    In [50]: my_foo = FooChild()

    In [51]: my_foo.echo_bar()

    True

    添加静态方法

    In [36]: @staticmethod

    ...:deftestStatic():

    ...:print("static method ....")

    ...:

    In [37]: Foochild = type('Foochild', (Foo,), {"echo_bar":echo_bar,"testStatic":

    ...: testStatic})

    In [38]: fooclid = Foochild()

    In [39]: fooclid.testStatic

    Out[39]:

    In [40]: fooclid.testStatic()

    static method ....

    In [41]: fooclid.echo_bar()

    True

    添加类方法

    In [42]: @classmethod

    ...:deftestClass(cls):

    ...:print(cls.bar)

    ...:

    In [43]:

    In [43]: Foochild = type('Foochild', (Foo,), {"echo_bar":echo_bar,"testStatic":

    ...: testStatic,"testClass":testClass})

    In [44]:

    In [44]: fooclid = Foochild()

    In [45]: fooclid.testClass()

    True

    元类就是用来创建类的东西,你创建类就是为了创建类的实例对象,元类就是类的类

    在python中万物皆对象,而且他们都是从一个类创建出来的,就是type

    __metaclass__属性

    你首先写下class Foo(object),但是类Foo还没有在内存中创建。Python会在类的定义中寻找__metaclass__属性,如果找到了,Python就会用它来创建类Foo,如果没有找到,就会用内建的type来创建这个类。

    classFoo(Bar):

        pass


    相关文章

      网友评论

          本文标题:Mr.Li--python-动态语言

          本文链接:https://www.haomeiwen.com/subject/emsnfxtx.html