JAVA网络爬虫
HttpClient

导航

 

python动态语言的特性

  • 给对象添加属性

    class Person(object):
        def __init__(self,new_name,new_age):
            self.name = new_name
            self.age = new_age
    
    
    laowang = Person("老王",18)
    print(laowang.name)
    print(laowang.age)
    laowang.addr = "北京"
    print(laowang.addr)
    
    laozhao = Person("老赵",20)
    Person.num = 100
    print(laozhao.num)
    print(laowang.num)
    
    # 运行结果
    老王
    18
    北京
    100
    100
    
  • 给对象添加方法

    import types
    
    class Person(object):
        def __init__(self,new_name,new_age):
            self.name = new_name
            self.age = new_age
    
    t = Person("老王",18)
    
    
    def eat(self):
        print("----%s正在吃----"%self.name)
    
    #t.eat = eat
    #t.eat()#虽然t对象中 ect属性已经指向了9行的函数,,,但是这句代码还是不正确
           #因为run属性指向的函数 是后来添加的,及t.eat()的时候,并没有把t当做
           #第一个参数,导致了第9行调用的时候,出现缺少参数的问题
    
            #第一个参数是函数 第二个参数是实列    
    t.eat = types.MethodType(eat,t) #把eat函数 变成t这个实列的方法
    t.eat()
    
    #还有种方法
    t.eat = eat
    t.eat(t) #把t传递给了self 这时候self指向了这个实列
    
    @staticmethod
    def test():
        print("----staticmethod----")
    
    #添加静态方法
    Person.test = test
    Person.test()
    
    
    @classmethod
    def printNum(cls):
        print("----classmethod----")
    
    #添加静态方法
    Person.printNum = printNum
    Person.printNum()
    
    # 运行结果
    ----老王正在吃----
    ----老王正在吃----
    ----staticmethod----
    ----classmethod----
    
  • __slots__的作用

    class Person(object):
        __slots__ = ("name","age") #类的实列只能添加 name属性 和age属性   添加别的直接报错
    
    
    p = Person()
    
    p.name = "老王"
    p.age = 18
    
    print(p.name)
    print(p.age)
    
    # 运行结果
    老王
    18
    
posted on 2019-08-27 14:23  gmlgxx  阅读(56)  评论(0)    收藏  举报