(一)Python入门-6面向对象编程:03类对象-类属性-类方法-静态方法

一:类对象

  前面讲的类定义格式中,“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)

原文地址:https://www.cnblogs.com/jack-zh/p/10847017.html

时间: 2024-10-29 19:07:54

(一)Python入门-6面向对象编程:03类对象-类属性-类方法-静态方法的相关文章

(一)Python入门-6面向对象编程:11对象的浅拷贝和深拷贝

对象的浅拷贝和深拷贝: 变量的赋值操作 只是形成两个变量,实际还是指向同一个对象. 浅拷贝 Python拷贝一般都是浅拷贝.拷贝时,对象包含的子对象内容不拷贝.因此,源对象 和拷贝对象会引用同一个子对象. 深拷贝 使用copy模块的 deepcopy 函数,递归拷贝对象中包含的子对象.源对象和拷贝对象 所有的子对象也不同. [操作] #测试对象的引用赋值,浅拷贝,深拷贝 import copy class MobilePhone: def __init__(self,cpu,screen): s

Python入门之面向对象编程(二)python类的详解

本文通过创建几个类来覆盖python中类的基础知识,主要有如下几个类 Animal :各种属性.方法以及属性的修改 Dog :将方法转化为属性并操作的方法 Cat :私人属性讲解,方法的继承与覆盖 Tiger :子类定义时调用父类方法(super的使用) Animal python中的一个类中有属性和方法,而二者都分为很多种类型,如下所示 属性分为普通属性和类属性 方法分为普通方法.类方法.静态方法. 具体定义方法和使用见下面的代码和注释,各个属性和方法的使用习惯等见最后的 print_anim

(一)Python入门-6面向对象编程:02类的定义-类和对象的关系-构造函数-实例属性-实例方法

一:类的定义 如果把对象比作一个“饼干”,类就是制造这个饼干的“模具”. 我们通过类定义数据类型的属性(数据)和方法(行为),也就是说,“类将行为和状态打 包在一起”. 对象是类的具体实体,一般称为“类的实例”.类看做“饼干模具”,对象就是根据这个“模 具”制造出的“饼干”. 从一个类创建对象时,每个对象会共享这个类的行为(类中定义的方法),但会有自己的属 性值(不共享状态).更具体一点:“方法代码是共享的,属性数据不共享”. Python中,“一切皆对象”.类也称为“类对象”,类的实例也称为“

(一)Python入门-6面向对象编程:07面向对象三大特征(封装、继承、多态)-继承

一:面向对象三大特征介绍 Python是面向对象的语言,也支持面向对象编程的三大特性:继承.封装(隐藏).多态. 封装(隐藏) 隐藏对象的属性和实现细节,只对外提供必要的方法.相当于将“细节封装起来”,只 对外暴露“相关调用方法”. 通过前面学习的“私有属性.私有方法”的方式,实现“封装”.Python 追求简洁的语法,没有严格的语法级别的“访问控制符”,更多的是依靠程序员自觉实现. 继承 继承可以让子类具有父类的特性,提高了代码的重用性. 从设计上是一种增量进化,原有父类设计不变的情况下,可以

(一)Python入门-6面向对象编程:01面向对象和面向过程区别-对象的进化

面向对象: 面向对象(Object oriented Programming,OOP)编程的思想主要是针对大型 软件设计而来的.面向对象编程使程序的扩展性更强.可读性更好,使的编程可以像搭 积木一样简单. 面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式 更加接近人的思维,从而大大提高了编程的效率. Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向 对象的基本功能,例如:继承.多态.封装等. Python中,一切皆对象.我们在前面学习的数据类型

(一)Python入门-6面向对象编程:10特殊方法和运算符重载-特殊属性

一:特殊方法和运算符重载 Python的运算符实际上是通过调用对象的特殊方法实现的.比如: #运算符-特殊方法 a = 20 b = 30 c = a + b d = a.__add__(b) print('c=',c) print('d=',d) 运行结果: c= 50 d= 50 常见的特殊方法统计如下: 每个运算符实际上都对应了相应的方法,统计如下: 我们可以重写上面的特殊方法,即实现了“运算符的重载”. [操作]运算符的重载 #测试运算符的重载 class Person: def __i

python的类的 静态属性 类方法 静态方法

一.静态属性 静态属性说的就是数据属性 1.定义一个房间的类,求下这个房间的面积 class Room: def __init__(self,name,ower,width,length,heigh): self.Name=name self.Ower=ower self.Width=width self.Length=length self.Heigh=heigh r1=Room("厕所","北爷",2,2,20000)#实例化出来一个实例r1,实例化的过程就是执

(一)Python入门-6面向对象编程:05方法没有重载-方法的动态性

一:方法没有重载 在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可.方法签名包含 3 个部分:方法名.参数数量.参数类型. Python中,方法的的参数没有声明类型(调用时确定参数的类型),参数的数量也可以由 可变参数控制.因此,Python中是没有方法的重载的.定义一个方法即可有多种调用方式, 相当于实现了其他语言中的方法的重载. 如果我们在类体中定义了多个重名的方法,只有最后一个方法有效. 建议:不要使用重名的方法!Python中方法没有重载. [操作] #Python中没有方

(一)Python入门-6面向对象编程:08多重继承-mro()-super()获得父类的定义

一:多重继承 Python支持多重继承,一个子类可以有多个“直接父类”.这样,就具备了“多个父类”的特点.但是由于,这样会被“类的整体层次”搞的异常复杂,尽量避免使用. 二:mro() Python支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,解释器将 “从左向右”按顺序搜索. MRO(MethodResolution Order):方法解析顺序. 我们可以通过mro()方法获得 “类的层次结构”,方法解析顺序也是按照这个“类的层次结构”寻找的. [操作]多重继承-mro()