Python学习笔记(7)——OOP_2

Python中的类

class Person():
    """
    文
    档
    内
    容
    """
    
    def __init__(self,name):
        self.name = name
    
    def speak(self):
        """打个招呼,介绍下自己"""
        print("Hello,我是" + self.name)

person1 = Person("张三")
person1.speak()
print(Person.__doc__)
print(help(Person.speak))

上面代码是一个简单的python类,下面来说明一下:

  1. 第一行定义了一个名字叫Person的类.其中class是关键字,小括号里是要继承的类.
  2. 第二行开始的是类的说明文档,用三引号引起来,可以支持多行.
  3. 接着__init__可以理解为类的构造函数,在类实例化时都会自动调用,里面的self是必须的,可以理解为其他语言中的this.顺便说一下像这类以 __ 开头结尾的函数都是Python中的魔法函数,所有魔法函数都会自动调用,并有自己的调用时机.
  4. 再往下的def speak(self)就是类的成员函数,所有的成员函数都有一个self参数.下面一行由三引号括起来的是这个函数的简介.到此为止一个简单的python类就已经写完了.
  5. 接着这一行person1 = Person(“张三”)是定义了一个名字为person1的Person类实例.
  6. person1.speak()是调用类中的成员函数,调用时会将person1作为成员函数speak的self参数传入
  7. print(Person.doc)的结果是打印Person类的说明文档,想要看的话可以自己运行上面的代码,你可以使用 类名.doc 的方式来查看所有类的说明文档.
    8.print(help(Person.speak))的显示结果是打印成员函数speak的函数说明

经过上面的例子,你应该能:

  1. 知道如何定义一个python类
  2. 知道如何写一个类的说明文档
  3. 知道如何定义类的构造函数
  4. 知道如何定义一个类的成员函数
  5. 知道如何写函数说明
  6. 知道如何实例化一个类,并调用其成员函数
  7. 知道怎么查看类的说明文档和函数的函数说明

类和对象的成员分析

类里面包含的东西可以笼统的分为两种,变量和函数.我们定义的类就好像一张设计图纸,而生成的实例就像是按照图纸制作出来的东西.在我学的所有支持OOP的程序语言中,都有一下几个共同点:

  1. 无论按照类所生成的实例有多少个,内存中的成员函数代码都只有一份
  2. 所有的实例都有一份自己独有的存储空间用于存储自己的变量.
  3. 实例调用成员函数时,都是将自己的存储空间地址传给成员函数,以实现功能的调用.这就是C++,C#,java里this的由来.别看这些语言中调用时没有显示的传入this,但看汇编代码能看出来其实都是传了this的,而且都是第一个传的.这也是为什么Python里为什么每个成员函数都要有self这个参数的原因.如果没有self,而函数代码又只有一份,那么如何区分这个实例和那个实例呢?

在Python里还有一个特点,就是类在定义完毕以后也有一份自己的存储空间,如果类里面有默认变量赋值,那么实例中如果没有修改该变量的话会直接引用类中的变量,而不是在自己的存储空间中复制一份.
如何证明我说的是正确的呢?请看下面的代码:

class Person():
    name = "张三"
    age = 18

print(Person.__dict__)				#__dict__可以显示该类或实例下的所有东西
person1 = Person()         		
print(person1.__dict__)
print(person1.name)

结果如下:
{‘module’: ‘main’, ‘name’: ‘张三’, ‘age’: 18, ‘dict’: <attribute ‘dict’ of ‘Person’ objects>, ‘weakref’: <attribute ‘weakref’ of ‘Person’ objects>, ‘doc’: None}
{}
张三

可以看到Person类里面有一堆东西,而实例里面什么都没有,却能用person1.name打印出名字,说明这个name用的是类里面的name.这段代码就能证明我上面观点的正确.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值