python:面向对象编程,封装、继承、多态

目录

  • 第一部分:Python
    • 一.面向对象编程
    • 二.继承
    • 三.多态
  • 备注:

第一部分:Python

一.面向对象编程

1.假设类A的一个实例化对象名称为b:
__init__(self)函数决定实例化时进行的操作。
__repr__(self)函数决定的是输入b给出的结果。
__str__(self)函数决定的是输入print(b)给出的结果,二者定义时都用return返回。
__del__(self)函数决定调用系统函数del()时执行的操作。
注:与self有关的函数称为实例函数,与类有关(不加self)的函数称为类函数。
2.在分析对象特征时,要明确属性是取决于每个实例,还是取决于全局,与实例关系不大,则该属性需要定义为静态成员。
注:self.属性为依赖于具体实例的属性,self表示实例,类名.self为整个类的属性。

class Book:
    # 定义全局属性,静态成员
    count = 0

    #初始化执行
    def __init__(self, title, price=0.0, author=None):
        self.title = title
        self.price = price
        self.author = author
        Book.count += 1

    #删除对象时执行,即调用系统函数del()时执行
    def __del__(self):
        Book.count -= 1

    #输入self时执行
    def __repr__(self):
        return '<书名为:{}>'.format(self.title)

    #输入print(self)时执行
    def __str__(self):
        return '[书名为:{}]'.format(self.title)

    def print_info(self):
        print('书名:{},价格:{},作者:{}'.format(self.title,self.price,self.author))

book1 = Book('python入门', 39.9, 'Tom')
book1.print_info()
print(book1)

3.设置不可改变的属性:在__init__(self,…)函数中的属性是可以用del()删除或者直接修改的,想要设置不可修改的属性,需要加上@property:

import datetime

class Student:

    def __init__(self,name,birth):
        self.name = name
        self.birth = birth

    @property
    def age(self):
        return datetime.date.today().year - self.birth.year

s1 = Student('Tom',datetime.date(1997,7,14))

print(s1.age)

注:用@property定义的为属性,不可修改或删除,可用@属性名.setter和@属性名.deleter定义相应的报错提示:

@age.setter
def age(self,value):
    raise AttributeError('禁止修改!')

@age.deleter
def age(self):
    raise AttributeError('禁止删除!')

二.继承

1.子类也叫派生类,父类也叫超类(super),在分析完所有对象特征后,可以先定义具有共性的父类,再定义继承父类的子类,即具体的一些分支,具体方法如下:

import datetime

class Employee:
    def __init__(self,name,birth,salary):
        self.name = name
        self.birth = birth
        self.salary = salary

#定义子类时,括号中写出其父类
class Programmer(Employee):
    def __init__(self,name,birth,salary,project):
        #调用父类中的初始化函数,Employee可用super()代替,但是不推荐
        Employee.__init__(self,name,birth,salary)
        self.project = project

p1 = Programmer('tom',datetime.date(1987,3,12),6000,'AI')

三.多态

1.定义:同一类型的不同实例,对于同一个消息,做出不同的响应。

备注:

1.python中的日期,需要导入datetime模块,import datetime,具体描述某个日期:datetime.date(年,月,日),获取年龄:
return datetime.date.today().year - datetime.date(年,月,日).year
2.类中的特征也可以是一个类,实际编程中类的串联和关联还有很多。

你可能感兴趣的:(python)