The use of classes python

First, the definition of a class called Student

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. 私有方法

Properties 1. class
class Properties are static and dynamic attributes, class instance variables and class variables are static properties. The method of dynamic properties is inside the class class.
2. Examples of

p1 = Student("haha",20) #实例化得到p1这个对象

3. instance variables and class variables (class variables modified)

直接放在类里的是类变量,在__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. Class init function

类的__init__方法也叫构造函数,
什么是构造函数,是一种特殊的函数。 主要用来在创建对象时初始化对象,
即为对象成员变量赋初始值。

5. The role of the class variable

定义公共属性,这样在对象实例化的时候,就不用再copy一份数据,节省内存开销。

6. destructor

类的__del__方法是析构函数,在c和c++中没有垃圾回收机制,
所以程序员写代码时必须定义析构函数来做内存的释放工作。
而在java和python中,本身就实现了垃圾回收机制,java中由java虚拟机来回收内存,python 中则由python解释器来回收资源。
所以在python当中默认不需要定义析构函数,
Python 会提供默认析构函数。如果有特殊需要可以定义一个__del__方法
在实例对象调用结束时做一些扫尾工作。
析构函数会在对象作用域中调用结束时自动调用来释放内存,无需手动调用。
如果要显式的调用析构函数,可以使用del关键字: del obj
这里del调用其实不是直接去释放内存,而是减少引用计数,
由垃圾回收机制来回收内存

7. private property

类的属性分静态属性和动态属性,通常我们说类的属性通常都是指类的静态属性。
现在来说私有属性,定义类的私有属性就是属性前面加上__双下划线
私有属性在外面是不能访问的也即类的对象是不能直接调用的属性。
可以在类的内部访问并修改。
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. Private Method

前面说过了私有属性,私有方法也类似。定义的时候可以通过函数名之前加__来完成定义。同样是不能在外部访问,只能内部访问。

Guess you like

Origin blog.51cto.com/14244213/2445808