栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【超简单】python第九 章教学

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【超简单】python第九 章教学

面向对象程序设计 九.面向对象 1.面向对象程序设计概述 1.面向对象的基本概念

面向对象程序设计会涉及对象、类、消息、方法、封装、继承、多态等许多概念,这些概念既是对现实世界的归纳和解释,也是实现面向对象程序设计的基础

(1)对象

现实世界中客观存在的事物称为对象,一个人,一个足球等等,每个对象都有自己的特征,人:姓名,年龄等等。

(2)类

类是具有相同属性和行为的一组对象的集合。

(3)消息

一个系统由若干个对象组成,各个对象之间通过消息相互联系、相互作用。

(4)封装

封装是指把对象的数据(属性)和操作数据的过程(方法)结合在一起,构成独立的单元,它的内部信息对外界是隐蔽的,不允许外界直接存取对象的属性,只能通过使用类提供的外部接口对该对象实施各项操作,保证了程序中数据的安全性。

(5)继承

继承反应的是类与类之间抽象级别的不同,根据继承与被继承的关系,可分为基类和衍类,基类称为父类,衍类称为子类。

(6)多态

多态是指同一名字的方法产生了多个不同的动作行为,也就是不同的对象收到相同的消息时产生不同的方法。

2.从面向过程到面向对象

假设要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个字典表示:

student1 = {'name':'Jasmine','score':99}
student2 = {'name':'Bob','score':111}

而处理学成的成绩可以通过函数实现:

def print_score(student):
    print('():()'.format(student1["name"],student1['score'])

但是采用面向对象的思想就是:

class Student:
    def __init__(self,name,score):
        self.name = name
        self.score = score
    
    def print_score(self):
        print('():()'.format(self.name,self.score)
2.类与对象 1.类的定义

class 类名:

        类体

类体定义类的成员,有两种类型的成员:一是数据成员,它描述问题的属性;二是成员函数,它描述问题的行为(称为方法)。这样,九把数据和操作封装在一起,体现了类的封装性。

class Person:
    name = 'yyx'            #定义了一个属性
    def printName(self):    #定义了一个方法
        print(self.name)

p = Person()
p.printName()

——————————————————————————————————————————————————
yyx
2.对象的创建和使用

一般格式:

对象名 = 类名(参数列表)

 创建对象后,可以使用"."运算符,通过实例对象来访问这个类的属性和方法:

对象名.属性名

对象名.函数名

class CC:
    x = 10      #定义属性
    y = 20      #定义属性
    c = 30      #定义属性

    def show(self):#定义方法
        print(self.x+self.y+self.c)

b = CC()        #创建实例对象b
b.x = 30        #调用属性x
b.show()        #调用方法show

——————————————————————————————————————————————
80
 3.属性和方法 1.属性和方法的访问控制

1.属性的访问控制

在类中可以定义一些属性,例如:

class Person:

        name = 'brenden'

        age = 18

p = Person()

print(p.name,p.age)

如果在属性前面加__,则该属性为私有属性,没加__默认为公有属性

class Person:

        __name = 'brenden'

        __age = 18

p = Person()

print(p.name)

这样会报错

2.方法的访问控制 

class Person:

        __name = 'brenden'

        __age = 18

        def getName(self):

                return self.__name

        def getAge(self):

                return self.__age

p = Person()

print(p.getName(),p.getAge())

2.类属性和实例属性

1.类属性

顾名思义,类属性就是类对象所拥有的属性,它被所有类对象的实例对象所公有,并且类属性还可以在类定义结束之后通过类名增加(id)。

class Person:
    name = 'brenden'        #公有属性
    __age = 18              #私有属性

p = Person()
p.id = '123123'
print(p.id)
print(p.name)
print(p.__age)

————————————————————————————————-————-
123123
brenden
Traceback (most recent call last):
  File "D:python 项目1练习123.py", line 9, in 
    print(p.__age)
AttributeError: 'Person' object has no attribute '__age'

 2.实例属性

class Car:
    def __init__(self,c):
        self.color = c          #定义实例对象属性
    def fun(self):
        self.length = 1.2       #给实例添加属性,但不提倡

s = Car('Red')
print(s.color)
s.fun()
print(s.length)
————————————————————————————————————————————————————————————

Red
1.2
3.类的方法

(1)类方法

类方法是类对象所拥有的方法,需要用修饰器"@classmethod"来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以"cls"作为第一个参数

class Person():
    place = 'Changsha'
    @classmethod        #类方法
    def getPlace(cls):
        return cls.place

p = Person()
print(p.getPlace()) #可以通过实例对象引用
print(Person.getPlace())    #可以通过类对象引用

——————————————————————————————————————————
Changsha
Changsha

(2)实例方法(最常用)

class Person:
    place = 'Changsha'
    def getPlace(self):     #实例方法
        return self.place

p = Person()
print(p.getPlace()) #可以通过实例对象引用

print(Person.getPlace())  #不可以通过类对象引用

——————————————————————————————————————————————————-
Changsha
Traceback (most recent call last):
  File "D:python 项目1练习123.py", line 9, in 
    print(Person.getPlace())  #不可以通过类对象引用
TypeError: getPlace() missing 1 required positional argument: 'self'

(3)静态方法

静态方法需要通过修饰器"@staticmethod"来进行修饰,静态方法不需要多定义参数

class Person:
    place = 'Changsha'
    @staticmethod
    def getPlace():     #静态方法
        return Person.place

print(Person.getPlace())

————————————————————————————————————————————-
Changsha
4.继承和多态 1.继承

当设计一个新类的时候,为了实现这种重用可以继承一个已设计号的类,一个新类从已有的类那里获得其已有特性,这种现象叫继承

class 子类名(父类名):

        类体

class UniversityMember:     #定义父类
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print("父",self.name)

    def tell(self):
        print(self.name,self.age)

class Student(UniversityMember):
    def __init__(self,name,age,marks):
        UniversityMember.__init__(self,name,age)
        self.marks = marks
        print('学生',self.name)

    def tell(self):
        UniversityMember.tell(self)
        print("marks",self.marks)

class Tearcher(UniversityMember):
    def __init__(self,name,age,salary):
        UniversityMember.__init__(self,name,age)
        self.salary = salary
        print("老师",self.name)

    def tell(self):
        UniversityMember.tell(self)
        print("salary",self.salary)

s = Student('yyx',12,13)
s.tell()

t = Tearcher('www',32,1111)
t.tell()

——————————————————————————————————————————————————————————————-
父 yyx
学生 yyx
yyx 12
marks 13
父 www
老师 www
www 32
salary 1111

多重继承:

class A():
    def fool(self):
        print("AAAA")

class B(A):
    def fool2(self):
        print("BBBB")

class C(A):
    def fool(self):
        print("CCCC")

class D(B,C):
    pass

d = D()
d.fool()

——————————————————————————————-
CCCC
 2.多态

这里举一个非常经典的例子,易于理解多态,其实多态的意思就是相同的方法,在不同类中的作用不同,产生的结果不同

class base(object):
    def __init__(self,name):
        self.name = name
    def show(self):
        print("base class:",self.name)

class subclass1(base):
    def show(self):
        print("sub class1:",self.name)

class subclass2(base):
    def show(self):
        print('sub class2:',self.name)

class subclass3(base):
    def show(self):
        pass

def testFunc(o):
    o.show()

first = subclass1("1")
second = subclass1("2")
third = subclass1("3")
testFunc(first)
testFunc(second)
testFunc(third)

————————————————————————————————————————————

sub class1: 1
sub class1: 2
sub class1: 3

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757125.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号