一、对象创建之后,属性赋值太麻烦,可以使用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版权协议,转载请附上原文出处链接和本声明。