Skip to main content

Python 入门基础知识 - 类的属性和方法

Python 入门基础知识 - 类的属性和方法

类的属性和方法

每一个类都有自己的属性和方法。属性和方法是面向对象程序设计所独有的概念。属性是类所封装的数据,而方法则是类对数据进行的操作。

类的属性

在上一篇文章中简单的定义和使用了类的属性。类的属性实际上是类内部的变量。上一篇文章的例子使用了类的属性,确切的说,称作类的

公有属性。在上篇文章中在类的外部设置了其属性的值,在某些情况下可能不希望在类的外部多其属性进行操作,此时就可以使用类的私有

属性。

数据保护是面向对象程序设计所特有的,在面向过程的程序设计中并没有数据保护的概念。在Python中与C++不同,在类的内部声明一个私有

成员不需要使用private关键字。在Python中,是通过类中属性的命名形式来表示类属性是公有还是私有的。类中的私有属性是不能在类的外部

进行操作的,这种方式起到了对属性的保护作用。

在Python中,如果类中的属性是以两条下划线开始的话,则该属性为类的私有属性,不能在类的外部被使用或者访问。

下面为一个私有属性的命名方式

__private_attre # 以双下划线开始

如果在类内部的方法中使用类的私有属性,则应该以如下的方式调用:

self.__private_attre # 应该在私有属性名钱加上"self."

实例如下:

class book:
    __author = ''
    __name = ''
    __page = 0
    price = 0
    __press = ''


a = book()
# a.__author # 调用属性 __author
# 会跑出如下异常信息
# AttributeError: book instance has no attribute '__author'

print(a.price)
# 0

a.price = 20
print(a.price)
# 20

# print(a.__name)
# 报错内容如下:
# AttributeError: book instance has no attribute '__name'

# print(a.__page)
# 报错内容如下:
# AttributeError: book instance has no attribute '__page'

可以看到,在类的定义的时候,凡是两条下划线开始的属性不能在类的外部访问,当然也不能修改。如果要修改类的私有属性值或者获取其值,

可以通过使用提供的方法来完成。

类的方法

类的方法实际上就是类内部使用def关键字定义的函数。定义类的方法与定义一个函数基本相同,在类的方法中同样也要使用缩进。

1、定义类的方法

在类的内部使用def关键字可以为类定义一个方法。与函数定义不同的是,类的方法必须包含函数"self",且"self"必须为第一个参数。

实例如下:

class book:
    __author = ''
    __name = ''
    __page = 0
    price = 0
    __press = ''

    def show(self):
        print(self.__author)
        print(self.__name)

    def setname(self, name):
        self.__name = name


a = book()
a.show()
a.setname('John')
a.show()  # 这里会输出"John"

与类的属性相同,类的方法也可以是类私有的,类的私有方法不能在类的外部调用。和类的私有属性命名相同,类的私有方法名也要

以两条下划线开始。类的私有方法只能在类的内部调用,而不能在类的外部调用。另外,在类的内部调用其私有方法,要使用"self.私有方法名"的形式。实例代码如下

class book:
    __author = ''
    __name = ''
    __page = 0
    price = 0
    __press = ''

    def __check(self, item):
        if item == '':
            return 0
        else:
            return 1

    def show(self):
        if self.__check(self.__author):
            print(self.__author)
        else:
            print('No value')

        if self.__check(self.__name):
            print(self.__name)
        else:
            print('No value')

    def setname(self, name):
        self.__name = name


a = book()
a.show()
a.setname('John')
a.show()
# a.__check() # 调用类的私有方法,结果出错
# 报错内容如下;
# AttributeError: book instance has no attribute '__check'

2、类的专有方法

在Python中有一类似以两条下划线开始并且以两条下划线结束的类的方法,称之为类的专有方法。专有方法是针对类的特殊操作。

例如,在类实例化时将调用__init__方法。部分类的专有方法如下:

__init__ 构造函数,生成对象时调用

__del__ 析构函数,释放对象时调用

__add__ 加运算

__mul__ 乘运算

__cmp__ 比较运算

__repr__ 打印、转换

__setitem__ 按照索引赋值

__getitem__ 按照索引获取值

__len__ 获得长度

__call__ 函数调用

实例演示如下:

class book:
    __author = ''
    __name = ''
    __page = 0
    price = 0
    __press = ''

    def __check(self, item):
        if item == '':
            return 0
        else:
            return 1

    def show(self):
        if self.__check(self.__author):
            print(self.__author)
        else:
            print('No value')

        if self.__check(self.__name):
            print(self.__name)
        else:
            print('No value')

    def setname(self, name):
        self.__name = name

    def __init__(self, author, name):
        self.__author = author
        self.__name = name


a = book('John', 'I like this book')
a.show()
# John
# I like this book
a.setname('About John')
a.show()
# John
# About John

实例环境声明:

# _*_ coding: utf-8 -*-
# version 2.7.13
版权声明

版权声明

durban.zhang 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/59