Python入门(下)第二天

类与对象

对象 = 属性 + 方法

对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实例共享的数据

封装:信息隐蔽技术

我们可以使用关键字 class 定义 Python 类,关键字后面紧跟类的名称、分号和类的实现。

继承:子类自动共享父类之间数据和方法的机制

多态:不同对象对同一方法响应不同的行动

Python 的 self 相当于 C++ 的 this 指针。

类的方法与普通的函数只有一个特别的区别 —— 它们必须有一个额外的第一个参数名称(对应于该实例,即该对象本身),按照惯例它的名称是 self。在调用方法时,我们无需明确提供与参数 self 相对应的参数。

Python 的魔法方法

据说,Python 的对象天生拥有一些神奇的方法,它们是面向对象的 Python 的一切...

它们是可以给你的类增加魔力的特殊方法...

如果你的对象实现了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,而这一切都是自动发生的...

类有一个名为__init__(self[, param1, param2...])的魔法方法,该方法在类实例化时会自动调用。

class Ball:
    def __init__(self, name):
        self.name = name

    def kick(self):
        print("我叫%s,该死的,谁踢我..." % self.name)


a = Ball("球A")
b = Ball("球B")
c = Ball("球C")
a.kick()
# 我叫球A,该死的,谁踢我...
b.kick()
# 我叫球B,该死的,谁踢我...

公有和私有

在 Python 中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的了。

class JustCounter:
    __secretCount = 0  # 私有变量
    publicCount = 0  # 公开变量

    def count(self):
        self.__secretCount += 1
        self.publicCount += 1
        print(self.__secretCount)


counter = JustCounter()
counter.count()  # 1
counter.count()  # 2
print(counter.publicCount)  # 2

# Python的私有为伪私有
print(counter._JustCounter__secretCount)  # 2 
print(counter.__secretCount)  

# AttributeError: 'JustCounter' object has no attribute '__secretCount'

继承
Python 同样支持类的继承,派生类的定义如下所示:

class DerivedClassName(BaseClassName):
       statement-1
              .
              .
              .
       statement-N

BaseClassName(基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:

class DerivedClassName(modname.BaseClassName):
       statement-1
              .
              .
              .
       statement-N

# 类定义
class people:
    # 定义基本属性
    name = ''
    age = 0
    # 定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0

    # 定义构造方法
    def __init__(self, n, a, w):
        self.name = n
        self.age = a
        self.__weight = w

    def speak(self):
        print("%s 说: 我 %d 岁。" % (self.name, self.age))


# 单继承示例
class student(people):
    grade = ''

    def __init__(self, n, a, w, g):
        # 调用父类的构函
        people.__init__(self, n, a, w)
        self.grade = g

    # 覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级" % (self.name, self.age, self.grade))


s = student('小马的程序人生', 10, 60, 3)
s.speak()
# 小马的程序人生 说: 我 10 岁了,我在读 3 年级

注意:如果上面的程序去掉:people.__init__(self, n, a, w),则输出:说: 我 0 岁了,我在读 3 年级,因为子类的构造方法把父类的构造方法覆盖了

什么是绑定?
Python 严格要求方法需要有实例才能被调用,这种限制其实就是 Python 所谓的绑定概念。

Python 对象的数据属性通常存储在名为.__ dict__的字典中,我们可以直接访问__dict__,或利用 Python 的内置函数vars()获取.__ dict__。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
八天Python入门到精通是一套针对Python编程语言的学习教程,旨在帮助初学者快速掌握Python的基础知识并逐步深入学习高级主题。以下是该教程的大致内容: 第一天:Python基础 - Python的历史和特点 - 安装Python环境 - 变量和数据类型 - 运算符和表达式 - 条件语句和循环语句 第二天:函数和模块 - 函数的定义和调用 - 函数参数和返回值 - 模块的导入和使用 - 常用内置函数的介绍 第三天:数据结构 - 列表、元组、字典和集合的使用 - 列表和字典的常用操作方法 - 列表推导式和字典推导式 第四天:文件操作和异常处理 - 文件的读写操作 - 异常的处理和捕获 - 上下文管理器的使用 第五天:面向对象编程 - 类和对象的概念 - 类的定义和实例化 - 继承、多态和封装的概念 - 魔术方法和属性装饰器 第六天:模块和包管理 - 模块的创建和使用 - 包的创建和使用 - 导入模块和包的方法 - 第三方库的安装和使用 第七天:网络编程和数据库操作 - 网络编程的基本概念 - 使用socket进行网络通信 - 数据库的连接和操作 - SQL语句的执行和结果处理 第八天:高级主题 - 多线程和多进程编程 - 正则表达式的使用 - 异步编程和协程 - Python的Web开发框架介绍 以上是八天Python入门到精通教程的大致内容,通过学习这些内容,你将能够掌握Python的基础知识并具备一定的编程能力。如果你有任何关于Python的问题,欢迎继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值