说明

Python 教程正在编写中,欢迎大家加微信 sinbam 提供意见、建议、纠错、催更。

类是面向对象开发的核心思想,可以解决我们现实生活的复杂问题。在了解了类的基本概念,我们来学习一下怎么定义一个类。

创建一个类

可以使用 class 关键字来定义一个类:

class Student(object):

pass

类的名称需要使用驼峰格式命名(所有单词首字母大写其余字母小写),如 PlayBoy。类名后边的括号内容是它的父类,如果新创建的类没有自定义的父类,则为 object(Python3 可以不用写)。object 为 Python 所有类的默认父类,都继承于它,这样你就拥有了好多可操作的基础对象,可以使用dir(Student)查看,里边的部分方法给我们提供一个框架,我们可以按它的格式实现一些功能。

创建示例

下面我们创建一个学生类:

class Student(object):

"""这是一个学生类"""

def __init__(self, name):

self.name = name

def say(self):

print(f'我的名字是:{self.name}')

def add(self, x, y):

print(f'这个加法我会,等于{x+y}')

我们来逐行分析一下,上边的定义是了哪些细节:

类名为 Student,继承自 object,三引号里的内容为类的介绍

__init__ 是一个类的初始化方法,初始化的时候需要传入一个姓名

定义了一个 say 方法,说出自己的名字

定义了一个 add 方法用于计算加法

注意 self, 就是自身,因为在定义类时不知道具体的实例是谁,就用 self 代替这个实例

实例化

接下来,我们使用一下上边定义的类。使用时我们需要将它实例化,就是初始成一个活生生的学生,这个学生叫 tom:

tom = Student('Tom') # 实例化

tom.name

# 'Tom'

tom.say() # 让他说句话

# 我的名字是:Tom

tom.add(1, 1) # 让他计算加法

# 这个加法我会,等于2

我们也可以给 tom 修改名字:

tom.name = 'Tome' # 修改姓名

tome.math = 88 # 增加一个新的属性并赋值

内置类属性

我们可以看这个类的简介:

tom.__doc__

# '这是一个学生类'

其他的:

tom.__dict__ # 查看类的属性,是一个字典

tom.__name__ # 类名

tom.__module__ # 类定义所在的模块

私有变量

为了安全起见,有些变量是不能被外部访问和调用。比如一个 Lady 类,那么她的年龄 age 就是私有变量,调用者不能访问,实例化后自己可以定义一个。再如,下例中的车的价格,是对外保密的。

在类中两个下划线开头可以声明该属性为私有,不能在类的外部被使用或直接访问,但可以在类的内部使用:

class Car(object):

__price = 50 # 私有变量

speed = 120 # 公开变量

def sell(self):

return self.__price - 10

以上我们定义了一个汽车的类,价格是私有变量,外部不能直接访问,但对外销售时(sell方法)可以使用它,对外优惠 10w 元:

c = Car() # 实例化

c.speed

# 120

c.__price

# AttributeError: 'Car' object has no attribute '__price'

c.sell()

# 40

但是,你可以使用 对象名._类名__私有属性名(object._className__attrName) 来访问私有变量:

c._Car__price

# 50

当然,你最好写一个专门的获取和设置私有变量的方法(下例的get_price()和set_price())来让外部获取和修改这个信息:

class Car(object):

__price = 50 # 私有变量

def get_price(self):

return self.__price

def set_price(self, price):

self.__score = price

属性方法命名

单下划线、双下划线、头尾双下划三种分别是:

_foo(单下划线): 表示被保护的(protected)类型的变量,只能本身与子类访问,不能用于 from module import *

__foo(双下划线): 私有类型(private) 变量, 只允许这个类本身访问

__foo__(头尾双下划):特殊方法,一般是系统内置的通用属性和方法名,如 __init__()

注:以上属性(变量)和方法(函数)均适用。

在python中可以用什么关键字来声明一个类_Python 定义类相关推荐

  1. 在python中可以用什么关键字来声明一个类_python里的raise是什么意思

    我们在开发当中经常会遇到一些未知或已知的错误,比如用requests发送请求时可能会出现异常,或者某个程序计算时出现分母为0的情况.面对各种奇形怪状的错误,高级语言都会有一个抛出错误的机制.在Pyth ...

  2. 在python中可以用什么关键字来声明一个类_3. Python基础语法

    注释 我们在文言文中经常会看到注释,注释可以帮助读者对文章的理解.代码中的注释也是一样,优秀的代码注释可以帮助读者对代码的理解.当然在代码编写过程中,注释的使用不一定只是描述一段代码,也可能的是对代码 ...

  3. python语言用什么关键字来声明一个类_python使用什么关键字定义类

    什么是类? 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 什么是方法? 类中的函数即为方法 如何定义一个类? 定义类,语法格式如下:class ...

  4. 在python中、如果异常并未被处理或捕捉_Python异常处理总结

    本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下: 1. 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果 ...

  5. Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型和 ‘\u559c\u6b22\u4e00\u4e2a\u4eba ’ 转为utf-8的解决办法...

    Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型和 '\u559c\u6b22\u4e00\u4e2a\u4eba ' 转为utf-8的解决办法 相信小伙伴们遇到过 ...

  6. Python中编码问题:u‘\xe6\x97\xa0\xe5\x90\x8d‘ 类型和 ‘\u559c\u6b22\u4e00\u4e2a\u4eba ’ 转为utf-8的解决办法

    Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型和 '\u559c\u6b22\u4e00\u4e2a\u4eba ' 转为utf-8的解决办法 参考文章: (1) ...

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

    一:类的定义 如果把对象比作一个"饼干",类就是制造这个饼干的"模具". 我们通过类定义数据类型的属性(数据)和方法(行为),也就是说,"类将行为和状 ...

  8. python面向对象类_python面向对象-类和对象

    一. 类的定义 class类名(): 代码 #定义类 classWasher():defwash(self):print("洗衣服") 注意:类名要满足标识符命名规则,同时遵循大驼 ...

  9. python中全局变量和局部变量关键字_Python中全局变量和局部变量的理解与区别

    前言 学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念 但是与其他编程语言又有所不同 全局变量与局部变量两者的本质区别就是在于作用 ...

最新文章

  1. 职场:5种幼稚表现,好多工作十年的人还在犯
  2. python遍历循环选择题_19道Python循环遍历,while,for语句测试题,网上看到的题目,自己不看答案全部做了一次,总共3个小时左右...
  3. 对Ubuntu操作系统进行彻底优化
  4. C#设计模式学习笔记:(20)职责链模式
  5. 关于sqoop增量导入oracle的数据到HDFS的出现的错误总结
  6. SSH+Oracle10G抛Disabling contextual LOB creation as createClob() m
  7. 如果你正在使用CocoaPods,你的.gitignore会有什么?
  8. 一:计算机基础入门及介绍
  9. bzoj4173 数学
  10. 十大铁饭碗职业排行,哪些行业最吃香?外行看热闹,内行看门道
  11. empty怎么发音_empty是什么意思_empty在线翻译_英语_读音_用法_例句_海词词典
  12. 大唐集团(这个不敷衍了),js逆向:★★★★
  13. 全球及中国游戏耳机市场运营模式分析及需求前景预测报告2022年版
  14. 为 什 么 有 的 文 件 不 可 以 重 命 名
  15. 清除异常关闭进程的任务栏托盘区残留图标
  16. 异地远程访问连接家里的群晖NAS【内网穿透】
  17. 第2天:程序设计语言的极简介绍
  18. 调用layoutSubviews一定要注意别忘了调用父类
  19. 0904、kali、使用john破解密码、nmap扫描、抓包、安全加固、Linux加固
  20. arm汇编指令探究之 ldmia

热门文章

  1. android logo动画,Android logo与开机动画
  2. JS企业中征码证件校验正则
  3. [转贴]孙正耀退休感言
  4. Unhandled exception at 0x0fd238de in face_rec.exe: 0xC000001D: Illegal Instruction
  5. 论文图片处理技巧新思路
  6. php stream_socket_sendto,socket_sendto()
  7. 【WPF】向command中传递EventArgs参数,使用mvvmlight
  8. DAZ设置dForce模拟权重
  9. 手机显示android怎么办,安卓手机卡顿怎么办?你必须要知道的办法!
  10. Apollo自动驾驶开发笔记47——apollo编译报错this rule is missing dependency declarations for the following files