RenderDoc基础类 + Python“基础”代码

这应该是国内第一份甚至是唯一份讲renderDoc的免费二开的文档,基于Python,Qt等

(这是一个冷门的学科,本身做TA比例就只有1/10,技术TA的比例又1/10,然后会做工具几年资历的又1/10,假如1000个观众,应该只有1个观众会往下看,谢谢观看!!)

RenderDoc生命周期和常用类

qdCaptureView

#python 中 renderDoc 类的继承这么写
import qrenderdoc as qrd
class Window(qrd.CaptureViewer):
    def __init__(self, ctx: qrd.CaptureContext, version: str):
        super().__init__()

        print("Creating WIMD window")

 属性和事件

event

    def OnEventChanged(self, event):

        draw = self.ctx.GetAction(event)

竟然是点击drawCall(事件),也可以键盘上下选择drawCall,会触发这个方法

Python代码-常规

私有属性(有些鸡肋)


python对于类的成员没有严格的访问控制限制,这与其他面向对象的语言有区别。关于私有属性和私有方法,有如下要点:
1)通常我们约定,两个下划线开头的属性是私有的,其他是公共的;
2)类内部可以访问私有属性(方法)
3)类外部不能直接访问私有属性(方法)
4)类外部可以通过“_雷鸣__私有属性(方法)”访问私有属性(方法)
 
class Employee:
 
    def __init__(self,name,age):
        self.name = name
        self.__age = age
 
e = Employee("gaoqi",18)
print(e.name)
print(e.__Employee__age)

报错:AttributeError: 'Employee' object has no attribute '__Employee__age'

正确写法是“_Employee__age”,类名前面是一个下划线;
 

另外可看看。。。。

Python - 面向对象编程 - 公共属性、保护属性、私有属性-腾讯云开发者社区-腾讯云

公共属性(官方例子不一定对)

估计最新版本的python  不支持-再下面这种官方文档写法了

(尽信书不如无书,我试过,65,66行这么写是错的,69这么写反而对,应该随意一个方法都可以写self.xxx,

但还是建议统一在头部,__init__统一写)

RenderDoc基础类 + Python“基础”代码_第1张图片

(官方文档写法) 

class PoloBlog:
    # 公共属性
    sum = 0

    # 构造方法
    def __init__(self, name):
        self.name = name

    # 公共方法
    def test(self):
        ...

Global属性(写法有些怪异)

Python 全局变量

#全局变量
city = "Athens"

def travel_plans():
    #首先,这就像我试图访问在函数外部定义的全局变量时一样。
    #正如您之前所见,这本身就可以正常工作。
    print(f"I want to visit {city} next year!")

    #但是,当我尝试从函数内部为全局变量 “city” 重新分配不同的值时,
    #尝试打印后,
    #它会抛出一个错误
    city = "London"
    print(f"I want to visit {city} next year!")

#调用函数
travel_plans()

#输出

#UnboundLocalError: local variable 'city' referenced before assignment

打印所有属性

Python教程(十)面向对象(9)类的访问控制 - songz

RenderDoc基础类 + Python“基础”代码_第2张图片

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
class UserInfo(object):
    def __init__(self, name, age, account):
        self.name = name
        self._age = age
        self.__account = account
    def get_account(self):
        return self.__account
if __name__ == '__main__':
    userInfo = UserInfo('两点水', 23, 347073565);
    # 打印所有属性
    print(dir(userInfo))
    # 打印构造函数中的属性
    print(userInfo.__dict__)
    print(userInfo.get_account())
    # 用于验证双下划线是否是真正的私有属性
    print(userInfo._UserInfo__account)

空方法,默认参数

def saveShaderText(t):
    pass
# 调用方法:
#        for v in cbufferVars:
#            s+=print_var(v)
def print_var(v, indent = ''):
    # TODO: ugly
    if '[' in v.name or ']' in v.name:
        # v is a row of a matrix
        valstr = ''
        indent = ''

 

Python API级别代码,常用

判断python版本

hasattr - 是否包含属性

if hasattr(shader, 'programResourceId'):

最后第三方链接

这些大佬,对于python语法的详细说明,就挺好了,

(个人只是陆陆续续,用了Python很多年,对2.7和3.2也不是很熟悉,不是很熟悉最新发展)

只是现在回过头来看,那时候还“证明”过2.7和3.2的区别,现在看来基搞笑,2.7过时是必然的,3.2->3.X 是历史发展的必然

(世界大同还是挺好的,Python从无政府状态,逐渐增加一些监督管理;而TypeScript在强政府的道路上注定走不远,貌似把javaScript干掉了,其实最终发现自己不得不成为另一个javaScript,这是各大普通程序员的人心所向)

Python类型注解,你需要知道的都在这里了 - 知乎 (zhihu.com)

你可能感兴趣的:(python,开发语言)