0
点赞
收藏
分享

微信扫一扫

【超简单】python第九 章教学

艾米吖 2022-03-12 阅读 78
python

面向对象程序设计

九.面向对象

1.面向对象程序设计概述

1.面向对象的基本概念

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

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 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.属性和方法的访问控制

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 <module>
    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 <module>
    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 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
举报

相关推荐

第九章 Flask

第九章 时间

第九章JDBC

看漫画学Python 第九章代码

第九章_子查询

0 条评论