python自学笔记3

面向对象:

上代码先:

class Student(object):
    snum=0
    name="class"
    idnum=0
    level='0'

    def __init__(self,name,idnum,level):
        self.name=name
        self.idnum=idnum
        self.level=level
        Student.snum+=1
        self.age=12
        print("init   :  " + str(Student.snum))
        print(self.age)

    def personInfo(self):
        print(self.name)
        print(self.idnum,self.level)

    def dowork(self):
        print("do work")

    def test(self):
        self.personInfo()
    



s1=Student('hello',123,'a')
s2=Student('world',122,'c')
s3=Student('python',111,'e')


s1.personInfo()
s2.personInfo()
s3.personInfo()

print(Student.name ,Student.idnum,Student.level)

运行结果

python自学笔记3_第1张图片

总结一下(有基础的小伙伴):

        结构:模块(.py文件)内定义类

                   类的成员变量,不是对象成员变量,这两个不是同一个概念,甚至可以说没有关系;有过Java基础的小伙伴会发现,这里的类成员变量,类似于Java类里面的静态变量,对象方法可以直接访问类成员变量,如上面的__init__(...),但是一定要加上限定,Student.xxx。self,这个怎么理解呢?这个才是代指对象本身,所以__init__中有很多的参数,这些变量是用来给对象的成员变量赋值的。这个地方,我故意用了类成员变量和对象成员变量重合,显示之间的区别。细心的小伙伴会发现,__init__里面还有一个age,没错,age也是对象成员变量,和Student没有关系。python里面的类感觉会比Java类更加符合面向对象的思想:Java类是所有的对象的抽象,但是类和对象之间的关系很紧密,类里面不仅仅有对于某个抽象的“描述”,还有对于“个体”的描述,但是python里面。似乎更加偏向于对“抽象”的描述,而不是个体,对于个体的描述,python在构造函数__init__()里面才会描述,换句话说,python里面,只有真正创造出某个对象的时候,这个对象才会真正被细化。

                     python类中所有的函数第一个参数都是self,代指对象自身,换句话说,不同的对象调用同一个方法,其实self是不同的,我们也会发现最后直接打印Sudent的成员变量时候,信息一直没有变化。同样,我们也发现,就是类也可以直接调用自身的变量或者函数(关于后面的权限问题暂且不论)

你可能感兴趣的:(python学习)