领取淘宝天猫优惠券:优惠淘 | 欢迎使用随心而码微信小程序,微信搜一搜【随心而码】可直接搜到。

Python 中级笔记-面向对象

Python Hicoder 689℃ 0评论

一、什么是面向对象

面向对象程序设计(Object-oriented programming,OOP)不仅指一种程序设计方法,更是一种程序开发方式。

重要的面向对象编程语言包含Common LispPythonC++Objective-CSmalltalkDelphiJavaSwift)、C#PerlRubyPHP等。

在编程解决问题时,面向对象程序设计开发方式关注的是“谁来做”——即谁来解决问题。

二、面向对象编程中的主要概念

1、类与对象

类(class):定义了一件事物的抽象特点。一般的,类定义了一个事物的属性和它可以做到的行为。编程时,我们所定义的类包含了数据的形式以及对数据的操作。举例来说,“狗”这个类包含了狗的一切基础特征(属性/形式),即所有“狗”都共有的特征或行为,如狗的繁殖、毛皮颜色和吠叫的能力。

通俗地说,类是具有相同属性和方法的对象的集合。“人”可归为一个类,各种动物各有它们所属的类,“大学”可归为一个类,等等。

方法:在类中定义的函数。

在Python中通过关键字class实现类的定义,语法如下:


class ClassName:
  block_class

在块block_class处写入类的成员变量(特征/属性/形式)及函数(操作)。如下是一个类dog的定义及其实例化:


class dog:
 # dog类的属性
 fur_color = "yellow"

 # 方法
 def Bark(self):
   return "汪汪汪汪"

# 实例化类——实例化类后才能使用其属性与方法
black_dog = dog()

# 访问类的属性和方法
print("dog类的fur_color属性:",black_dog.fur_color)
print("dog类的bark方法:", black_dog.Bark())

对象(object):是类的实例,即实例化后的类,如上代码中的black_dog就是一个实例化的对象。black_dog是一只具体的狗。dog类是抽象化的狗,指所有的狗。

在上述代码中,可以看到类的方法和普通的函数有一个特别的区别——类的方法必须有一个额外的第一个参数名称,习惯上用self。self代表的是类的实例。

类有一个名为 init()的特殊方法(构造方法),该方法在类实例化时会自动调用。其定义如下:


def __init__(self):
  self.data = []

定义一个带构造方法的类:


class Complex:
 def __init__(self, realpart, imagpart):
   self.r = realpart # self 即指 Complex 的实例对象
   self.i = imagpart

x = Complex(2.2, 4.5)
print(x.r,x.i) #输出结果:2.2 4.5

类的私有属性与私有方法:

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

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

代码示例:


class JustCounter:
 __secretCount = 0 # 私有变量
 publicCount = 0 # 公开变量

 def count(self):
   self.__secretCount += 1
   self.publicCount += 1
   print (self.__secretCount)

counter = JustCounter()
counter.count()
counter.count()
print (counter.publicCount)
print (counter.__secretCount) # 报错,实例不能访问私有变量

执行以上程序输出结果为:


1
2
2
Traceback (most recent call last):
 File "test.py", line 16, in <module>
 print (counter.__secretCount) # 报错,实例不能访问私有变量
AttributeError: 'JustCounter' object has no attribute '__secretCount'

2、继承

继承(inheritance):指通过一个已有的类(称之为父类)定义另外一个类(称之为子类),子类共享父类开放的属性和方法。子类的对象除了是子类的一个实例,还是其父类的一个实例。


# 定义父类
class baseClassName:
  block_class

# 定义子类
class subClassName(baseClassName):
  block_class

示例:


class people:
 name = ''
 age = 0
 def __init__(self, name, age, weight):
   self.name = name
   self.age = age
   self.__weight = weight
 def speak(self):
   print("%s 说:我 %d 岁了" %(self.name,self.age))

class student(people):
 grade = ''
 def __init__(self, name, age, weight, grade):
   people.__init__(self, name, age, weight)
   self.grade = grade
 # 覆写父类的speak方法
 def speak(self):
   print("%s 说:我 %d 岁了,我在读 %d 年级。" %(self.name, self.age, self.grade))

Liming = student('Liming', 10, 55, 3)
Liming.speak() # 执行后输出结果:Liming 说:我 10 岁了,我在读 3 年级。

上述代码为单继承。同样的,一个子类也可以继承多个父类。同时,在上述代码中,在子类student中我们重新写了一个speak方法,这样会把父类people中写的speak方法覆盖。如果想重新使用父类的speak方法,可使用如下代码:


super(student,Liming).speak() #用子类对象调用父类已被覆盖的方法

3、其他概念

多态(polymorphism):指不同的方法作用于不同对象,可以有不同的解释,产生不同的执行结果。

示例如下:


class dog:
 def __init__(self,Bark):
   self.Bark = Bark
 def call(self):
   print("狗叫:%s" %(self.Bark))

class chick:
 def __init__(self,Crow):
   self.Crow = Crow
 def call(self):
   print("鸡叫:%s" %(self.Crow))

little_dog = dog('汪汪汪汪')
Lusi = chick('叽叽叽叽')
# 狗吠
little_dog.call()
# 鸡叫
Lusi.call()

都是叫,但是叫的表现方式却大不相同。

转载请注明:随心而码 » Python 中级笔记-面向对象

喜欢 (0)