zoukankan      html  css  js  c++  java
  • python之路——第三块(面向对象进阶)

    静态方法

    @staticmethod   ------>  截断跟类的关联,变成一个函数方法

    但是需要类实例化后才能调用这个方法,可以用于导入其他模块的功能,构成工具包

    class blackperson(person):
        def __init__(self,name,job,love,speed,animals_obj):
            super(blackperson, self).__init__(name,job,love)
            self.animals = animals_obj
            # person.__init__(self,name,job,love)
            self.speed = speed
        def run(self):
            print(self.name,"run %s"%self.speed)
        @staticmethod      #静态方法
        def work(name):
            print("%s is working now"%name)
    
    d2 = blackperson("dzk","st","zm","200",1)
    d2.work("alex")
    

    类方法

    @classmethod

    只能访问类变量,不能访问实例变量

    class blackperson(person):
        def __init__(self,name,job,love,speed,animals_obj):
            super(blackperson, self).__init__(name,job,love)
            self.animals = animals_obj
            # person.__init__(self,name,job,love)
            self.speed = speed
        @classmethod
        def run(self):
            print(self.name,"run %s"%self.speed)
        @staticmethod      #静态方法
        def work(name):
            print("%s is working now"%name)
    d2 = blackperson("dzk","st","zm","200",1)
    d2.run()
    

      加上类方法后,调用会报错,但定义了两个类变量,就能正常执行。类方法不能调用构造函数的属性,只能调用公有属性。

        name = "alex"
        speed = 1
    

    属性方法

    @property

    把一个方法变成静态属性,不能直接传参数,可以用@xxx.setter重新写一个方法用来对变成静态属性后赋值操作。而且不能del删除,只能用@xxx.delter来删除 

    class person(object):
        def __init__(self,name,job,love):   #构造函数,构造方式,初始化方法
            self.name = name
            self.job = job
            self.love = love
        @property
        def say(self):
            print("您好,",self.name)
        def game(self):
            print(self.name,"is playing game")
        def marry(self):
            print("%s married with %s"%(self.name,self.love))
    d1 = person("dzk","st","lyf")
    d1.say
    

      调用的时候如果加括号会报错,因为是已经变成了静态属性,所以不用加括号,直接调用。

    _doc_  打印类的描述信息,即类的注释信息

    _module_  输出对象调用的模块

    _dic_  以字典形式打印类下的信息

    _del_  析构方法,当对象在内存中被释放时,自动触发执行。

    反射 ------>hasattr(),getattr(),setattr(),delattr() 四个方法

    hasattr(d,choice)  , d是实例后的对象,choice是方法的代词,用于查询类中是否有choice这个方法

    class person(object):
        def __init__(self,name,job,love):   #构造函数,构造方式,初始化方法
            self.name = name
            self.job = job
            self.love = love
        def say(self):
            a = 1
            print("您好,",self.name)
            print(a)
        def game(self):
            print(self.name,"is playing game")
        def marry(self):
            print("%s married with %s"%(self.name,self.love))
    
    p1 = person("dzk","st","lyf")
    choice = input(">>>>>")
    hasattr(p1,choice)
    print(hasattr(p1,choice))
    

      如果输入的是say,返回True

    getattr(d,choice) 如果方法存在,调用choice这个方法

    class person(object):
        def __init__(self,name,job,love):   #构造函数,构造方式,初始化方法
            self.name = name
            self.job = job
            self.love = love
        def say(self):
            a = 1
            print("您好,",self.name)
            print(a)
        def game(self):
            print(self.name,"is playing game")
        def marry(self):
            print("%s married with %s"%(self.name,self.love))
    
    p1 = person("dzk","st","lyf")
    choice = input(">>>>>")
    hasattr(p1,choice)
    print(hasattr(p1,choice))
    getattr(p1,choice)()
    

      调用的时候,直接在gerattr()后再加一个括号即可,如果方法不存在,报错

    setattr(x,y,z)  x:对象,y:字符串 , z:方法  动态的将z方法装配进类中,可添加静态属性

    setattr(p1,"age","22")
    setattr(p1,"math",lambda num: num + 1)
    
    # print(getattr(p1,choice))
    print(getattr(p1,choice)(2))
    

      第一个是设置一个静态属性,age = 22

      第二个是设置一个新的方法,并用getattr()调用

  • 相关阅读:
    python:一个比较有趣的脚本
    opencv:图像模糊处理
    opencv:基本图形绘制
    opencv:摄像头和视频的读取
    C++:lambda表达式
    opencv:傅里叶变换
    opencv:创建滑动条
    opencv:通过滑动条调节亮度和对比度
    【源码】防抖和节流源码分析
    【css】最近使用的两种图标字体库
  • 原文地址:https://www.cnblogs.com/japhi/p/6923220.html
Copyright © 2011-2022 走看看