2018-11-25 孙小北

Python入门之面向对象

Python是一种解释型的、面向对象的、带有动态语义的高级程序设计语言,本节主要总结Python入门之面向对象:类,对象,实例化,构造函数,类的属性和方法。

相关概念

类(Class): 用来描述具有相同的属性和方法对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类似对象的抽象。

方法:类中定义的函数。(类的成员函数)

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外类变量通常不作为实例变量使用。

实例变量:定义在方法中的变量,只作用于当前实例的类。

数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。(类变量+实例变量)

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。

实例化:创建一个类的实例,类的具体对象。(创建对象)

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法

注:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。对象可以包含任意数量和类型的数据。

类定义

# coding:utf-8
# 计算器类,实现加减乘除


class Calculator:
    # 类的成员变量
    name = 'My Calculator'

    # 类的成员函数
    # 加法
    def add(self, x, y):
        print(self.name, '--add')
        return x + y

    # 减法
    def minus(self, x, y):
        print(self.name, '--minus')
        return x - y

    # 乘法
    def times(self, x, y):
        print(self.name, '--times')
        return x * y

    # 除法
    def divide(self, x, y):
        print(self.name, '--divide')
        return x / y

注:类的名称一般首字母大写,变量和函数名称一般首字母小写(养成良好的编码习惯)

类对象

# 实例化计算器类
calculator = Calculator()
print(calculator.name)
sum = calculator.add(5, 8)
print('5+8=', sum)

输出:

My Calculator

My Calculator --add

5+8= 13

注:创建一个类之后,可以通过类名访问其属性(obj.name,obj.function())

构造函数

类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用

class People:
    # 类变量 公共变量
    name = ''
    age = 0
    sex = '男'
    # 类变量 私有变量
    __site = 'www.xiaowangyun.com'

    # 构造函数 专有函数
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    # 公共函数获取私有变量
    def get_site(self):
        print('site:', self.__site)

    # 公共函数speak
    def speak(self):
        print('name:', self.name, ' age:', self.age, ' sex:', self.sex)

    # 私有函数speak
    def __speak(self):
        print('name:', self.name, ' age:', self.age, ' sex:', self.sex)
 
 
# 实例化
xwy = People('小望云', 2, '女')
xwy.speak()
xwy.get_site()
print(xwy.name)

# 类的实例化对象访问类的私有方法和私有属性会报错
# print(xwy.__site)
# xwy.__speak()

出现一个小问题,找了半天,哈哈,逗~ 围观一下:Python构造函数报错:TypeError: People() takes no arguments    

注:

1)__init__    init前后各两个下划线_

2) 重写构造函数后,参数必须和构造函数所必须参数一致

3)self代表类的实例,而非类

类的属性

私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

公共属性

private_attrs:直接属性名字便是共有属性,类的实例化对象可以访问公共属性,但不能访问私有属性。

类的方法


在类地内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self。

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。self代表类的实例,而非类。

类的公共方法

即类里面定义的普通的函数,类的实例化对象可以访问公共方法,不能访问私有方法

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__private_methods。

类的专有方法(方法名前后均有两个下划线)

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

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

__repr__ : 打印,转换

__setitem__ : 按照索引赋值

__getitem__: 按照索引获取值

__len__: 获得长度

__cmp__: 比较运算

__call__: 函数调用

__add__: 加运算

__sub__: 减运算

__mul__: 乘运算

__truediv__: 除运算

__mod__: 求余运算

__pow__: 乘方

注:方法名前后均有两个下划线(_)



编辑:孙小北

本文地址: https://www.xiaowangyun.com/wyblog/detail/?id=1023

版权归属: www.xiaowangyun.com   转载时请以链接形式注明出处

0 条评论

快来评论

物以类聚

最新评论

2017-10-06

一辈子不长,只有珍惜了,才不至于后悔。

2017-10-06

懂得感恩,才能走得更远。

标签云

归档

取消

感谢您的支持,您的每一次打赏都是一次鼓励!

扫码支持
每一次支持,都是不懈的动力

打开支付宝扫一扫,即可进行扫码打赏哦