python 面向对象-类变量和类方法使用(四)

一、对象创建之后,属性赋值太麻烦,可以使用init方法,没有被调用,怎么传参!

class Student:
    # 成员变量
    def __init__(self,name,gender,tel):
        self.name=name
        self.gender=gender
        self.tel=tel

    # 成员方法
    def show(self):
        print(f'{self.name}的性别-{self.gender},她的电话-{self.tel}')

# 构造方法
stu1=Student('samantha','F',110)
stu2=Student('john','M',112)
# 调用方法
stu1.show()
stu2.show()

 

二、类变量

"""
class 类名:
    变量名 = 值
调用:
    赋值:
        类名.变量名 = 值
    取值:
        类名.变量名
    区别:
    1.实例变量 > 对象名.变量名
    2.类变量   > 类名.变量名
"""
class Student:
    #类变量:不会随着对象的改变而发生
    info='学生信息'
    # 成员变量:随着对象的改变而发生改变
    def __init__(self,name,gender,tel):
        self.name=name
        self.gender=gender
        self.tel=tel

# 类名.变量名
print(Student.info)

  

"""
在没有创建对象之前,我们尝试了类名.实例变量名
 Student.name 发生异常:AttributeError: type object 'Student' has no attribute 'name'
"""
print(Student.name)
# 创建对象
stu1=Student('samantha','F',110)
"""
类名.实例变量名 => 类名无法去调用实例变量,Student.gender 会发生异常:AttributeError: type object 'Student' has no attribute 'gender'
对象名.类变量名 => 对象是可以调用类变量,stu1.info
"""
# print(stu1.name,stu1.info,Student.gender)

三、类方法

   类成员: 为了节约内存空间
    1.变量
         类变量 : 直接定义在类里面,对象的不同不会产生变化,直接归属于类管辖
         实例变量 : 定义在init方法里面, self 对象创建之后才会执行, 随着对象不同而发生改变
    
    2.方法
        类方法: 不会随时对象的改变而发生改变
        实例方法: 会随着对象的改变而发生改变
 (1) 类方法
    class 类名:
        @classmethod
        def 方法名(cls, 形参):
            方法体
    
    (2) 实例方法
    class 类名:
        def 方法名(self,形参1,形参2,.......):
            方法体
 调用:
    类名.方法名(实参)  **推荐使用
    对象名.方法名(实参)  **不常用

 注意:
  1.类方法: @classmethod   cls类
  2.实例方法:              self对象
class Student:
    #类变量:不会随着对象的改变而发生
    info='学生信息'
    # 成员变量:随着对象的改变而发生改变
    def __init__(self,name,gender,tel):
        self.name=name
        self.gender=gender
        self.tel=tel
    #实例方法
    def show(self):
        print(f'{self.name}的性别-{self.gender},她的电话-{self.tel}')
    #类方法
    @classmethod
    def myClass(self):
        print('类方法的使用!')

#调用
# 类名.方法名(实参)
Student.myClass()

#创建对象
stu=Student('mike','Man',110)
#对象名.成员变量
print(stu.name,stu.gender)
#对象名.方法名(实参)
stu.show()

四、类变量和类方法的使用

     1、类方法中不允许使用实例变量和实例方法。

     2、实例方法中允许使用类变量和类方法。 

class Student:
    #类变量:不会随着对象的改变而发生
    __info='学生信息'

    # 成员变量:随着对象的改变而发生改变
    def __init__(self,name,gender,tel):
        self.name=name
        self.gender=gender
        self.tel=tel

    #实例方法
    def show(self):
        print(f'{self.name}的性别-{self.gender},她的电话-{self.tel}')

    #类方法,cls是参数!!!
    @classmethod
    def myClass(cls):
        #访问类方法
        cls.display()
        # 访问类属性
        print(cls.__info)


    @classmethod
    def display(self):
        print('我是类方法!!')


# 1.实例对象.类方法名(实参1,实参2,...)
stu=Student('mike','Man',110)
stu.show()

# 2.类对象.类方法名(实参1,实参2,...)
Student.myClass()


版权声明:本文为hlx20080808原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。