吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1359|回复: 1
收起左侧

[Python 转载] 【笔记】类对象、类属性和类方法与和静态方法

[复制链接]
cccyyys 发表于 2021-6-24 10:21
类对象
类对象的定义格式  “class 类名:",当解释器执行class语句时,就会创建一个类对象。
[Python] 纯文本查看 复制代码
class Student:
    def __init__(self,name,score):
        self.name = name
        self.score = score

    def say_score(self):
        print('{0}的分数为:{1}'.format(self.name,self.score))

print(id(Student))
print(type(Student))

s1 = Student
s2 = s1('cys',80).say_score()
Student('cys',80).say_score()

执行结果为:2876958655504
<class 'type'>
cys的分数为:80
cys的分数为:80
在Python中,一切皆对象,所以类也是一个对象,称之为“类对象”,我们可以看到,类对象的类型是“type”,而且我们通过赋值把这个类赋值给s1,用s1调用和直接使用类名调用产生的结果是一样的。
类属性
和实例属性相同,类属性是从属于类对象的,可以被所以实例对象共享。
类属性的定义方式:
class 类名:
    类变量名 = 初始值
[Python] 纯文本查看 复制代码
class Student:
    company = 'SXT'  #类属性
    count = 0  #类属性

    def __init__(self,name,score):
        self.name = name   #实例属性
        self.score = score
        Student.count += 1
    def say_score(self):  #实例方法
        print('我的公司是:',Student.company)
        print(self.name,'的分数是:',self.score)

s1 = Student('cys',80)
s1.say_score()
print('一共创建了{0}个Student对象'.format(Student.count))

运行结果为:我的公司是: SXT
cys 的分数是: 80
一共创建了1个Student对象
内存分析:当解释器执行class语句时,内存中会生成一个类对象,类对象中保存着“company”和“count”两个类属性,还有say_score()方法的信息,使用__new__()方法构造一个新的实例对象,并使用__init__()方法将该实例属性初始化,并保存有“name”和“score”两个实例属性,say_score()方法是直接从类中共享的,当s1 = Student('cys',80)时,解释器会先把“cys”和80两个对象跟别传递给“name”和“score”,然后将Student类赋值给s1,当s1.say_score()时,系统解释器会调用Student类中的say_score()方法,并打印出结果。
类方法与静态方法
类方法是从属于类对象的方法。类方法通过@classmethod来定义,格式如下:
@classmethod
def 类方法名(cls[,形参列表])
要点如下:
1、@classmethod必须位于方法上面一行
2、第一个cls必须要:cls指的是类对象本身;
3、调用类方法格式:“类名.类方法名(参数列表)”。参数列表中,不需要也不能给cls传参。
4、类方法在访问实例属性和实例方法会导致错误;
5、子类继承父类方法时,传入cls时子类对象,二非父类对象
[Python] 纯文本查看 复制代码
class Student:
    company = 'SXT'

    @classmethod
    def printCopany(cls):
        print(cls.company)
Student.printCopany()

这是一个简单的类方法,注意类方法在访问实例属性和实例方法会导致错误。
静态方法
Python中允许定义与“类对象”无关的方法,称为“静态方法”。
静态方法通过装饰器@staticmethod来定义,格式如下:
@staticmethod

def 静态方法名([形参列表])
    函数体
要点如下:
1、@staticmethod必须位于方法上面一行;
2、调用静态方法格式:“类名.静态方法名(参数列表)”;
3、静态方法中访问实例属性和实例方法会导致错误。
[Python] 纯文本查看 复制代码
class Student2:
    company = 'SXT'

    @staticmethod
    def add(a,b):
        print('{0}+{1}={2}'.format(a,b,a+b))
Student2.add(3,4)

运行结果为:3+4=7
这是一个简单的静态方法,静态方法中的内容可以完全与类无关,而且静态方法中可以调用类属性,但是不能调用实例属性和实例方法,类方法同样。

免费评分

参与人数 1吾爱币 +5 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

yijiuxiaole 发表于 2021-6-24 20:07
感谢分享 正在学习到这呢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表