安装nvidia apex, g++ cuda torch
655 2023-04-03 05:06:19
一.python的面向对象的重要术语
1、多态(polymorphism):一个函数有多种表现形式,调用一个方法有多种形式,但是表现出的方法是不一样的。 2、继承(inheritance)子项继承父项的某些功能,在程序中表现某种联系 3、封装(encapsulation)把需要重用的函数或者功能封装,方便其他程序直接调用 4、类:对具有相同数据或者方法的一组对象的集合 5、对象:对象是一个类的具体事例 6、实例化:是一个对象事例话的实现 7、标识:每个对象的事例都需要一个可以唯一标识这个事例的标记 8、实例属性:一个对象就是一组属性的集合 9、事例方法:所有存取或者更新对象某个实例一条或者多条属性函数的集合。 10、类属性:属于一个类中所有对象的属性, 11、类方法:那些无须特定的对性实例就能够工作的从属于类的函数。一.封装
1.概念
公开属性:可以在类以外的任何地方直接访问。
私有属性:只能在类的内部被直接访问,在对象属性的前面添加两个下划线表示是私有属性。
2.属性未被私有化
1 class Person(): 2 def __init__(self, name, age): 3 # 公开属性 4 self.name = name 5 self.age = age 6 7 8 p1 = Person("jack", 10) 9 # 直接访问10 print(p1.name, p1.age) # jack 1011 12 # 修改13 p1.name = "tom"14 p1.age = 1915 print(p1.name, p1.age) # tom 19
3.属性被私有化
工作原理:一个属性一旦被私有化,在底层形成了 _类名__属性名 的属性名 ,但是不建议使用。私有化属性在底层的存在形式根据操作系统或者Python解释器的不同会有所差别,如果直接使用此种方式访问,违背了Python跨平台的特点。
1 class Person(object): 2 def __init__(self, name, age): 3 self.__name = name 4 self.__age = age 5 6 7 p = Person("jack", 10) 8 print(p.name,p.age) #AttributeError: 'Person2' object has no attribute 'name' 9 print(p.__name) #AttributeError: 'Person2' object has no attribute '__name'10 print(p._Person__name) # jack
在类外面访问属性,无非涉及到两个操作:获取值,修改值。
1 class Person(object): 2 def __init__(self, name, age): 3 self.__name = name 4 self.__age = age 5 6 # 返回被私有化属性的值 7 def getname(self): 8 return self.__name 9 10 def setname(self, name):11 self.__name = name12 13 def getage(self):14 return self.__age15 16 def setage(self, age):17 if age < 0:18 age = abs(age)19 self.__age = age20 21 22 p = Person("jack", 10)23 # 获取值24 r1 = p.getname()25 print(r1) # jack26 # 修改值27 p.setname("tom")28 r2 = p.getname()29 print(r2) # tom30 31 p.setage(-19)32 print(p.getage()) # 19
二.继承