首先定义一个名为Student的类java
class Student: #__init__函数是类的构造函数,在实例化的时候作一些初始化工做 num = 1123 #类变量 name = 'wu' def __init__(self, name,age): self.name = name #实例变量,做用域是实例自己 self.age = age def get_score(self): #类方法 print("score = 99")
上边这个类Student是类名类名通常要大写这个是规范。 有几个注意的点:
1. 类的属性 2. 实例化 3. 类变量与实例变量(修改类变量) 4. 类的__init__方法(也叫构造函数) 5. 类变量的做用 6. 析构函数 7. 私有属性 8. 私有方法
1.类的属性
类的属性分静态属性和动态属性,类里的实例变量和类变量都是静态属性。类里边的方法是类的动态属性。
2 . 实例化python
p1 = Student("haha",20) #实例化获得p1这个对象
3 . 类变量与实例变量(修改类变量)c++
直接放在类里的是类变量,在__init__函数里的是实例变量 类变量至关于一个默认值, 当类变量跟实例变量是同一个变量名的时候 对于当前这个对象来讲实例变量覆盖了类变量的值,也就是说优先找实例变量, 只有在实例变量不存在的状况下才会找类变量 print(p1.num,p1.name) 这个语句输出:1123 haha 类变量有一个name 实例变量也有一个name,先找实例变量 这个时候若是修改类变量num的值 先实例化一个变量 p2 = Student("xixi",30) p1.num = 10 print(p1.num,p1.name) print(p2.num,p2.name) 结果: 10 haha 1123 xixi 类变量并无改变,这里的 p1.num = 10至关于给p1这个对象定义了一个实例属性num 修改了值修改了值,并不会影响其余对象。由于它的做用域是实例自己 要是真的想修改类变量应该怎么写呢? Student.num = 20这样就修改了类变量的值
4 . 类的init函数程序员
类的__init__方法也叫构造函数, 什么是构造函数,是一种特殊的函数。 主要用来在建立对象时初始化对象, 即为对象成员变量赋初始值。
5.类变量的做用ide
定义公共属性,这样在对象实例化的时候,就不用再copy一份数据,节省内存开销。
6.析构函数函数
类的__del__方法是析构函数,在c和c++中没有垃圾回收机制, 因此程序员写代码时必须定义析构函数来作内存的释放工做。 而在java和python中,自己就实现了垃圾回收机制,java中由java虚拟机来回收内存,python 中则由python解释器来回收资源。 因此在python当中默认不须要定义析构函数, Python 会提供默认析构函数。若是有特殊须要能够定义一个__del__方法 在实例对象调用结束时作一些扫尾工做。 析构函数会在对象做用域中调用结束时自动调用来释放内存,无需手动调用。 若是要显式的调用析构函数,可使用del关键字: del obj 这里del调用其实不是直接去释放内存,而是减小引用计数, 由垃圾回收机制来回收内存
7.私有属性code
类的属性分静态属性和动态属性,一般咱们说类的属性一般都是指类的静态属性。 如今来讲私有属性,定义类的私有属性就是属性前面加上__双下划线 私有属性在外面是不能访问的也即类的对象是不能直接调用的属性。 能够在类的内部访问并修改。 class Person: def __init__(self,name,age,stature): self.name = name self.age = age self.__stature = 1.7 #私有属性 def get_stature(self): return self.__stature p1 = Person("fransics",21,1.9) #print(p1.__stature) print(p1.get_stature()) 这个代码片里直接print私有属性__stature是访问不到的会报错。而能够经过类方法在内部访问并返回。
8.私有方法对象
前面说过了私有属性,私有方法也相似。定义的时候能够经过函数名以前加__来完成定义。一样是不能在外部访问,只能内部访问。