说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
类是面向对象开发的核心思想,可以解决我们现实生活的复杂问题。在了解了类的基本概念,我们来学习一下怎么定义一个类。
可以使用 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}')
我们来逐行分析一下,上边的定义是了哪些细节:
__init__
是一个类的初始化方法,初始化的时候需要传入一个姓名接下来,我们使用一下上边定义的类。使用时我们需要将它实例化,就是初始成一个活生生的学生,这个学生叫 tom:
tom = Student('Tom') # 实例化
tom.name
# 'Tom'
tom.say() # 让他说句话
# 我的名字是:Tom
tom.add(1, 1) # 让他计算加法
# 这个加法我会,等于2
我们也可以给 tom 修改名字:
tom.name = 'Tome' # 修改姓名
tom.math = 88 # 增加一个新的属性并赋值
我们可以看这个类的简介:
tom.__doc__
# '这是一个学生类'
其他的:
tom.__dict__ # 查看类的属性,是一个字典
tom.__class__ # 所属类
tom.__class__.__name__ # 类名
tom.__module__ # 类定义所在的模块
更多的内容可以查看Python 的特殊属性。
为了安全起见,有些变量是不能被外部访问和调用。比如一个 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__()
foo_
(单后置下划线,单右下划线):用于避免与关键词冲突,也用于初始化参数中表示不需要用户传入的变量,通常会定义初始值,如 love_ = None
注:以上属性(变量)和方法(函数)均适用。
更新时间:2024-06-13 16:50:37 标签:python 类