Python入门之面向对象
Python是一种解释型的、面向对象的、带有动态语义的高级程序设计语言,本节主要总结Python入门之面向对象:类,对象,实例化,构造函数,类的属性和方法。
相关概念
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类似对象的抽象。
方法:类中定义的函数。(类的成员函数)
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
实例变量:定义在方法中的变量,只作用于当前实例的类。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。(类变量 实例变量)
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。(创建对象)
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
注:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。对象可以包含任意数量和类型的数据。
类定义
代码语言:javascript复制# 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
注:类的名称一般首字母大写,变量和函数名称一般首字母小写(养成良好的编码习惯)
类对象
代码语言:javascript复制# 实例化计算器类
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__() 的特殊方法(构造方法),该方法在类实例化时会自动调用
代码语言:javascript复制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__: 乘方
注:方法名前后均有两个下划线(_)