python入门-6面向对象编程:03类对象-类属性-类方法-静态方法(代码片段)

jack-zh jack-zh     2022-12-09     196

关键词:

一:类对象

  前面讲的类定义格式中,“class 类名:”。实际上,当解释器执行class 语句时, 就会创建一个类对象。

【操作】

#测试类对象的生成
class Student:
    pass   #空语句

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

s1 = Student()
print(s1)
Stu2 = Student
s2 = Stu2()
print(Stu2)
print(s2)

运行结果:

  <class ‘type‘>
  2220691901896
  <class ‘__main__.Student‘>
  <__main__.Student object at 0x000002050D649208>
  <class ‘__main__.Student‘>
  <__main__.Student object at 0x000002050D649160>

  注:我们可以看到实际上生成了一个变量名就是类名“Student”的对象。我们通过赋值给新变 量Stu2,也能实现相关的调用。说明,确实创建了“类对象”。

  【注】pass 为空语句。就是表示什么都不做,只作为一个占位符。当写代码时, 遇到暂时不知道方法或者类中加入什么时,可以先用 pass占位,后期再补上。

二:类属性

  类属性是从属于“类对象”的属性,也称为“类变量”。由于,类属性从属于类对象,可以 被所有实例对象共享。

  类属性的定义方式:

    class 类名:

      类变量名= 初始值
  在类中或者类的外面,我们可以通过:“类名.类变量名”来读写。

【操作】 类属性的使用测试

#测试类属性
class Student:
    company = **公司    #类属性
    count = 0    #类属性

    def __init__(self,name,score):   #构造方法
        self.name = name       #实例属性
        self.score = score     #实例属性
        Student.count = Student.count + 1

    def say_score(self):     #实例方法
        print(公司是:,Student.company)
        print(self.name,的分数是:,self.score)

s1 = Student(张三,80)     #s1是实例对象,自动调用__init__()方法
s1.say_score()
print(共创建了0个Student对象.format(Student.count))

运行结果:

  公司是: **公司
  张三 的分数是: 80
  共创建了1个Student对象

  内存分析:实例对象和类对象创建过程(重要)

    技术图片

 

三:类方法

  类方法是从属于“类对象”的方法。类方法通过装饰器@classmethod来定义,格式如下:

    @classmethod def

    类方法名(cls [,形参列表]) :

      函数体

  要点如下:

    1. @classmethod必须位于方法上面一行

    2. 第一个cls 必须有;cls指的就是“类对象”本身;

    3. 调用类方法格式:“类名.类方法名(参数列表)”。 参数列表中,不需要也不能给 cls 传 值。

    4. 类方法中访问实例属性和实例方法会导致错误

    5. 子类继承父类方法时,传入cls 是子类对象,而非父类对象

【操作】类方法使用测试

#类方法使用测试
class Student:
    company = xxx公司    #类属性
    @classmethod
    def printCompany(cls):
        print(cls.company)

Student.printCompany()

四:静态方法

  Python中允许定义与“类对象”无关的方法,称为“静态方法”。

  “静态方法”和在模块中定义普通函数没有区别,只不过“静态方法”放到了“类的名字空 间里面”,需要通过“类调用”。

  静态方法通过装饰器@staticmethod来定义,格式如下:

    @staticmethod def

    静态方法名([形参列表]) :

      函数体

  要点如下:

    1. @staticmethod必须位于方法上面一行

    2. 调用静态方法格式:“类名.静态方法名(参数列表)”。

    3. 静态方法中访问实例属性和实例方法会导致错误

【操作】静态方法使用测试

#测试使用静态方法
class Student:
    company = xxx公司    #类属性

    @staticmethod
    def add(a,b):     #静态方法
        print(0+1=2.format(a,b,a+b))
        return a+b

Student.add(20,30)

 

python入门-6面向对象编程:01面向对象和面向过程区别-对象的进化

...式更加接近人的思维,从而大大提高了编程的效率。  Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向对 查看详情

day29面向对象入门

Python之路,Day17=Python基础17-面向对象入门 创建类和对象面向对象编程是一种编程方式,此编程方式的落地需要使用“类”和“对象”来实现,所以,面向对象编程其实就是对“类”和“对象”的使用。类就是一个模板,模板... 查看详情

python入门-6面向对象编程:12设计模式之工厂模式-单例模式(代码片段)

一:工厂模式实现  设计模式是面向对象语言特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是:GOF(GoupOfFour)23种设计模式。  工厂模式实现了创建者和调用者的分离,使用专门的... 查看详情

python入门-6面向对象编程:07面向对象三大特征(封装继承多态)-继承(代码片段)

一:面向对象三大特征介绍  Python是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。  封装(隐藏)    隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装... 查看详情

python入门-6面向对象编程:06私有属性和私有方法(实现封装)-@property装饰器-get和set方法-总结(代码片段)

一:私有属性和私有方法(实现封装)  Python对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。关于私有属性和私有方法,有如下要点:    1.通常我们约定,两个下划线开头的属性是私有的(private)。... 查看详情

python面向对象编程01:入门类和对象(代码片段)

正式的Python专栏第36篇,同学站住,别错过这个从0开始的文章!前面写了文件的读取和文件处理等其他函数,里面用到了os库。本来想分享os库,发现这个库可能对于初学者来说比较难,所以后面再等合适... 查看详情

python入门-6面向对象编程:11对象的浅拷贝和深拷贝(代码片段)

...个变量,实际还是指向同一个对象。  浅拷贝    Python拷贝一般都是浅拷贝。拷贝时,对象包含的子对象内容不拷贝。因此,源对象和拷贝对象会引用同一个子对象。  深拷贝    使用copy模块的deepcopy函数,递归拷... 查看详情

python入门--05面向对象编程(代码片段)

正文在下面,先打个广告:面向对象编程类和实例定义类是通过class关键字,class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,所有类都会继承... 查看详情

python入门--05面向对象编程(代码片段)

正文在下面,先打个广告:面向对象编程类和实例定义类是通过class关键字,class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,所有类都会继承... 查看详情

python入门-6面向对象编程:09多态(代码片段)

多态:  多态(polymorphism)是指同一个方法调用由于对象不同可能会产生不同的行为。在现实生活中,我们有很多例子。比如:同样是调用人的休息方法,张三的休息是睡觉,李四的休息是玩游戏,程序员是敲代码。同样是吃... 查看详情

03python面向对象编程1(代码片段)

1.创建和使用类1.1创建Dog类。根据Dog类创建的每个实例都将存储名字和年龄。我们赋予了每条小狗蹲下(sit())和打滚(roll_over())的能力:In [2]:classDog():"""Asimpleattempttomodeladog."""def__init__(self,name,age):"""Initializenameandageattributes."... 查看详情

python面向对象编程01:入门类和对象(代码片段)

正式的Python专栏第36篇,同学站住,别错过这个从0开始的文章!前面写了文件的读取和文件处理等其他函数,里面用到了os库。本来想分享os库,发现这个库可能对于初学者来说比较难,所以后面再等合适... 查看详情

面向对象入门(封装)

编程的方式:·面向过程:根据业务逻辑从上到下垒代码·函数式:将某功能代码封装到函数中,通过调用函数来简洁代码·面向对象:对函数进行分类和封装,让开发变得“更好、更快、更强”  面向对象编程(objectorient... 查看详情

03python面向对象编程5(代码片段)

...向对象的三大特征之一,也是实现软件复用的重要手段。Python的继承是多继承机制,即一个子类可以同时有多个直接父类。Python子类继承父类的语法是在定义子类时,将多个父类放在子类之后的圆括号里。语法格式如下:In [... 查看详情

python面向对象编程03:类继承和其衍生术语(代码片段)

正式的Python专栏第38篇,同学站住,别错过这个从0开始的文章!前篇学委展示分享了面向对象编程和深度认识类的结构,最后稍微提到了继承。这次我们把继承和继承衍生的术语一并解释Python支持单继承,多... 查看详情

python核心编程总结(四面向对象与异常)(代码片段)

✍、脑图时刻四、面向对象与异常✍、脑图时刻1、面向对象1.1、定义类1.1.2、创建对象1.1.3、self1.2、添加和获取对象属性1.2.1、类外面添加对象属性1.2.2、类外面获取对象属性1.2.3、类里面获取对象属性1.3、魔法方法1.3.1、`__ini... 查看详情

python入门-6面向对象编程:10特殊方法和运算符重载-特殊属性(代码片段)

一:特殊方法和运算符重载  Python的运算符实际上是通过调用对象的特殊方法实现的。比如:#运算符-特殊方法a=20b=30c=a+bd=a.__add__(b)print(‘c=‘,c)print(‘d=‘,d)运行结果:  c=50  d=50常见的特殊方法统计如下:  每个运算... 查看详情

python入门-6面向对象编程:08多重继承-mro()-super()获得父类的定义(代码片段)

一:多重继承  Python支持多重继承,一个子类可以有多个“直接父类”。这样,就具备了“多个父类”的特点。但是由于,这样会被“类的整体层次”搞的异常复杂,尽量避免使用。二:mro()  Python支持多... 查看详情