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

说明

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__()

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值