Python学习笔记(2)

类的概述

类(Class)提供了一种将数据和函数捆绑到一起的方法,创建一个新的类代表创建了一个新的对象。每一个实例对象都拥有自己特有属性和继承的父类属性,用于表征自己此时此刻的状态。总所周知,状态是可能随时变化的,为此实例对象提供了一系列方法用于修改对象的状态信息。

作用域和命名空间

命名空间(namespace)是一种变量名映射到其对象的一种关系,目前主要是通过字典的形式得以实现。不同命名空间的变量名互不干扰,即使同名也是可以的(为了提高代码的可读性,还是建议以含义命名比较合适)。
==属性(attribute)==的访问是通过点号运算符实现的,如object.attribute。属性可能是只读或者可写的。
作用域(scope)则是可以直接访问某个命名空间的一块代码区域。
Python中可以通过关键字globalnonlocal来改变搜索变量名的命名空间。

类学习

初识类

类定义

class   Classname:
	statements...

class关键字用于定义一个新的类,类的创建也就开辟了一个新的命名空间,内部的赋值过程都会被绑定到这个命名空间。

类属性

在类内部定义的变量名,都是类的属性,可以通过object.attribute访问属性,修改属性。__doc__是内置的属性,用于查看类的文档字符串说明。

class Student:
    """
        we define a new class,the name of class is Student
    """
    number = 50

print(Student.number)  #属性访问
Student.number = 100 # 属性修改
print(Student.__doc__)
print(Student.number) 

类的实例化

实例化也即具体化,类是一类对象的抽象集合,而实例化则是抽象到具体的一个过程。好比,水果是一个类,而西瓜则是一个实例对象。类的实例化好比是一个无参函数的过程,当然他也可以传递参数,请看后续介绍。

Tom = Student() # 类Student的实例化

定制特定初始状态的实例

__init__方法,在定义该方法后,创建实例过程会自动调用__init__方法。

class Student:
    """
        we define a new class,the name of class is Student
    """
    def __init__(self,age,sex): 
    # 参数self代表实例化对象,即Tom所指向的对象
    # <__main__.Student object at 0x000002138CD98400>
        self.age = age
        self.sex = sex
    number = 50

Tom = Student(20,'man') #自动调用__init__方法
print(Tom.age,Tom.sex)

类属性和实例属性

类属性是所有继承该类的实例对象所共有的,大家都可以访问。一旦改变所有实例对象和类属性都会一起改变;
实例属性是正对实例本身的属性,只能通过实例对象自己访问,修改。
实例对象无法修改类属性,类属性和实例属性同名时,实例属性会覆盖类属性

class Student:
    """
        we define a new class,the name of class is Student
    """

    def __init__(self, age, sex):
        print(self)
        self.age = age
        self.sex = sex

    number = 50

Tom = Student(20, 'boy')
John = Student(21, 'girl')
print(Tom.number, John.number)  # 访问类属性
print(Tom.age, John.age)  # 访问实例属性

Tom.grade = 98  # 实例Tom增加一个grade属性
print(Tom.grade)

try:
    print(John.grade)  # 只属于Tom实例对象
except AttributeError:
    print("John has not this attribute.")

John.number = 100  # 实例对象无法修改类属性
print(Student.number, Tom.number, John.number)  # 访问类属性

Student.number = 70
print(Student.number, Tom.number, John.number)  # 访问类属性

del John.number # 解除属性引用
print(Student.number, Tom.number, John.number)  # 访问类属性

在这里插入图片描述

类继承

在类名之后的括号内,列出所要继承的父类名称,该类会继承父类的属性和方法,如果存在同名的属性则会覆盖父类的属性,如果存在同名的方法,则重写了父类方法。
class Classname(BaseClassName):
statements
Python有两个内置函数用于检查继承关系,isinstance()issubclass(),前者用于检查该实例的类型,后者用于检查是否是某类的子类。
多继承

class ClassName(Base1, Base2, Base3):
		statements

属性搜索顺序按照深度优先,从左到右原则

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值