Python3面向对象程序设计

Python3面向对象程序设计基础

前言

这是我的第二篇博客,本来想单纯只记录NPL自然语言学习过程。但今天复习Python3发现自己在Python语言方面还是有很多不足的,就比如面向对象这方面(主要是当初学java时候这部分没有认真学~),所以想再把这部分内容重新拾起来,本人也是新手,不足之处请大家多多指教哦。

1、面向对象概述

面向对象设计,说白了就是把现实世界是实体映射成计算机世界中的对象,把现实世界中的实体为概念世界中的抽象类,把概念世界中的抽象数据类映射为计算机世界中的类!在计算机世界中,类是对象的抽象,而对象是类的实例化。在现实世界、概念世界、计算机世界中,类与对象的映射关系如下图所示:
Python3面向对象程序设计_第1张图片

2、类和对象

2.1 类(class)

类是用来描述具有相同的属性和方法的对象的集合。在Python中使用class关键字构造类,并在类中定义属性和方法。通常可以理解为类是对象的模板,对象是类创建出来的产品,对象是类的实例。其一般说明类语法如下:

class 类名 :
    属性定义  #变量定义
    方法定义  #函数定义
注意
1、定义类的关键字为‘class’,类名通常是第一个字母大写。
2、对象的定义通过使用类名后跟一对圆括号来创建。
3、类具有属性和方法。
小例子
class Person:           #使用class说明类
    name = "恰巧偶遇"    #类属性
    age = 21            #公有属性
    def hello(self):    #定义hello类方法
        print('hello,how are you?')
print(Person.name)
print(Person.age)       #通过类直接调用类属性
p = Person()            #创建类对象p
p.hello()               #通过对象调用类方法

2.2 对象

对象是通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。其支持属性引用和实例化两种操作。

小例子
p = Person()            #创建类对象p
print(p.name)           #通过对象p调用属性
print(Person.age)       #通过类直接引用属性

3、类属性与实例属性

3.1 类属性

类属性是在类中方法之外定义的属性,又分为公有属性和私有属性,他们以属性命名来区分的,比如在属性前面加入两个下划线’__'表示私有属性,否则表示公有属性。

注意
1、公有属性有两种访问方法分别为通过类名和实例对象来访问。
2、私有属性不能在类外通过类名和对象名来访问
小例子
class People:
    name = '恰巧偶遇'  #类的公有属性
    __age = '21'       #类的私有属性
p = People()           #创建类对象
print(p.name)          #正确
print(People.name)     #正确
print(p.__age)         #错误,在类外调用私有属性
print(People.__age)    #错误,在类外调用私有属性

4、对象方法

对象方法和类属性是类似的,同样分为公有和私有其通过命名方式区分。如果在方法名前加两个下划线’__’,表示为私有方法,否则为公有方法。而对象方法和普通方法只有一点不同,对象方法必须有一个额外的第一个参数名称self。

注意
1、公有方法通过类名和对象名来调用。
2、私有方法不可在类外调用,只能在对象公有方法中通过self调用。
小例子
class People:
    def sayHi(self):
        print("hello zhl")
    def __getHi(self):
        print("hello lyc")
    def output(self):
        self.__getHi()
p = People()           #创建类对象
p.sayHi()              #正确
p.__getHi()            #错误,类外直接调用私有方法
p.output()             #正确,通过公有方法调用私有方法

5、构造函数与析构函数

5.1 构造函数

__init__方法作为Python的一种特殊方法,方法名的开始和结束都是双下划线,该方法称为构造函数,一般我们用来为属性设置初始值的,每次创建类实例的时候都会先自动执行构造函数,为对象分配内存。注意该方法的第一个参数永远都是self,这表示创建的实例本身。

小例子
class People:
    def __init__(self, name):
        self.name = name
    def sayHi(self):
        print("hello, my name is ", self.name)
p = People("zhl")      #创建类对象
p.sayHi()   

5.2 析构函数

析构函数的方法名为__del__, 它是用来释放对象占用的资源,完成内存清理工作的,析构函数又称为垃圾收集器。

小例子
class Cat:
    def __init__(self, num):
        self.num = num
        print("number is", self.num, 'object is born...')
    def __del__(self):   #析构函数
        print("number is", self.num, 'object is born...')
cat1 = Cat(1)            #创建类对象
cat2 = Cat(2)            #创建类对象
del cat1
del cat2

6、继承性

继承性是通过派生类和基类实现的,被继承的基类又称为父类或者超类,而新类称为子类或派生类。

注意
1、Python类继承时,基类的构造方法不会被调用。
2、调用基类的方法,需要加上基类的名称作为前缀,带上self参数。
3、在类中调用普通函数时不需要带上self参数
小例子
class Zhl:
    def get(self):
        print("I'm Zhl")
class Lyc(Zhl):
    print("I'm Lyc")
c = Lyc()   #输出I'm Lyc
c.get()     #调用父类方法,输出 I'm Zhl

7、应用举例

编写人员类(Person),该类具有名字(name)、年龄(Age)、性别(Sex)等属性,通过对Person类的继承得到教师类(Teacher),该类能够存放教师的职称、学历、工资、奖金等信息,并能计算出总收入(工资+奖金)。

代码
class Person:
    def __init__(self,Name,Age,Sex):
        self.Name = Name
        self.Age = Age
        self.Sex = Sex
class Teacher(Person):
    sum = 0
    def __init__(self,Name,Age,Sex,Title,Qual,Salary,Prize):
        self.Name = Name
        self.Age = Age
        self.Sex = Sex
        self.Title = Title
        self.Qual = Qual
        self.Salary = Salary
        self.Prize = Prize
    def p(self):
        print("Name:", self.Name)
        print("Age:", self.Age)
        print("Sex:", self.Sex)
        print("Title:", self.Title)
        print("Qual:", self.Qual)
        print("Salary:", self.Salary)
        print("Prize:", self.Prize)
    def count(self):
        sum = self.Salary+self.Prize
        print('sim is:', sum)
teacher = Teacher('Zhl', 20, 'male', 'professor', 'doctor', 9900, 6600)
teacher.p()
teacher.count()

你可能感兴趣的:(基础)