Python学习(15):面向对象(1)-类与对象

一、关于Python类的说明

1.类是现实世界或者思维世界中的实体在计算机中的反馈,它可以将数据以及这些数据的操作封装在一起。
2.类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响;
3.Python的所有类型实例都是对象,而我们自定义的对象类型就是面向对象中的类;
4.类是对象的抽象,对象是类的实例;
5.面向对象的三大特性:封装、继承和多态;

二、关于类的使用示例

下面演示了一个类的定义和使用,关键代码如下:

classStudent():

    #类变量:定义在这里是类变量,可以由类名直接调用,也可以由对象来调用
    status = "类变量:学生身份"
    area = "类变量:学校"
    motto = "类变量:好好学习,天天向上"
    sum  = 0

    #构造函数:特殊的实例方法(带有"_init__"),用以创建实例对象
    def __init__(self,name,gender1="男", age=18,score= 0):
        #实例变量:构造函数中通过self绑定,设置成员变量
        self.name= name
        self.gender = gender1
        self.age = age

        #实例方法内访问实例变量,需要使用self,对比下面四行代码
        #第二行代码,虽然不使用self也打印了相同的值,但其实打印的是形参name
        #比如修改形参为gender1后再直接打印gender,就会显示报错
        print(self.name) 
        print(name)      
        #print(self.gender)
        #print(gender)   #'gender' is not defined,报错

        #实例方法中访问类变量的两种方法
        print(Student.status)    
        print(self.__class__.status)


    #实例方法:第一个参数必须是self
    def introSelf(self):
        print("------我是一名学生,我的信息是:------")
        print("我的名字:"+ self.name) #访问实例变量
        print("我的性别:"+ self.gender)
        print("我的年龄"+ str(self.age))
        print("我的年龄"+ Student.status) #访问类变量


    #类方法:必须是使用@classmethod装饰器的方法才是类方法
    @classmethod
    def plusSum(cls):
        cls.sum += 1
        #print(self.name)  #不能访问实例变量
        print("类方法访问类变量sum:"+ str(cls.sum))
        print("类方法访问类变量sum:"+ str(Student.sum))


    #静态方法:
    @staticmethod
    def testStaticMethod():
        #print(self.name)  #不能访问实例变量
        print("静态方法访问类变量sum:"+ str(Student.sum))
测试代码:

#测试1:创建实例对象,并调用类方法
stu1 = Student("小明")        #创建Student实例

stu1.introSelf()             #调用实例的公开方法

Student.plusSum()            #调用类方法,增加学生计数

print(Student.motto)         #通过类名访问类变量

print(stu1.__class__.motto)  #通过实例访问类变量

stu1.testValue = "testValue" #外部实例直接增加原不存在的实例属性

print(stu1.testValue)

三、构造函数

构造函数是通过特殊的init_方法来创建实例对象的方法,它具有以下特点
1.传入的第一个参数必须是self,表示创建的实例本身;
2.构造函数与普通方法一样,如果没有return值,默认是返回none;
3.构造函数在创建对象时会自动调用,也可以主动调用但是不常用;

四、类变量与实例变量

类变量:直接定义在类中的变量
有两种方法访问类变量:
1.通过类名访问:”类名.类变量名”,如”Student.motto”
2.通过实例访问:”实例名.class_.类变量名”,如”stu1.__class.motto”

实例变量:实例变量是和具体实例相关的变量,所以只能被实例访问,有两种方法添加实例变量:
1.在构造方法中通过self绑定,会增加新的实例属性
2.在外部,通过创建的实例直接绑定,会增加新的实例属性,如:stu1.testValue = “testValue”

五、实例方法与类方法

实例方法是在类中定义的用于描述实例行为的函数,它具有以下特点:
1.实例方法参数中必须添加self关键字,否则报错,但是调用方法的时候不需要传入self;
2.self用于表示当前实例,用于访问实例属性;
3.self可以使用this等其他变量名替换,但是不推荐这样做;
4.实例方法只能被创建后的实例调用,而不能像类方法一样通过类名调用;

类方法具有以下特点:
1.类方法的方法名上必须用装饰器”@classmethod”标记,第一个参数必须是cls;
2.cls用于表示当前类,用于访问类变量,操作与实例无关的行为;
3.cls也可以换成self等其他变量名替换,但不推荐这样做;
4.类方法通过类名直接调用,也可以被实例调用(但不推荐)
5.类方法中只能访问类变量(通过cls或者类名),不能访问实例变量

六、静态方法

1.静态方法的方法名上必须用装饰器”@staticmethod”标记,参数不限制;
2.静态方法可以被类或者实例调用;
3.静态方法只能访问类变量(通过类名),不能访问实例变量;
4.静态方法功能与类方法功能相似,但又与面向对象本身关联不大,所以不推荐经常用;

七、变量查找顺序

当我们需要在外部通过实例来访问它的实例变量时,Python返回该变量的顺序如下:
1.Python会根据变量名在实例中查找此变量,如果存在就会直接返回该变量;
2.如果对象中不存在此变量,且类中存在同名的类变量,则返回此类变量;
3.如果类变量也不存在,就会继续在父类中寻找,直至找到返回或者查无此变量;
4.注意:此查找顺序只在外部访问实例变量时有效,实例方法内部访问实例便量不符合此规则

 ##八、方法与函数的区别
方法和函数都指的我们封装的用来实现特定功能的代码块。但是方法的概念更偏向于设计层面,所以结合面向对象的程序思想来分析,对于这样的代码块,定义在类里叫作方法,定义在模块中称之为函数。

猜你喜欢

转载自blog.csdn.net/DreamcoffeeZS/article/details/80608637
今日推荐