<07day>_面向对象

一、类对象

类对象支持两种操作:属性引用-和-实例化

属性引用使用和 Python 中所有的属性引用一样的标准语法:obj.name

类对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义是这样:

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj
class Chinses:
    """一个简单的类实例"""
    i = 12345
    def f(self):
        return ‘hello world‘

# 实例化类
x = Chinses()
# 访问类的属性和方法
print("Chinses类的属性 i 为:", x.i)
print("Chinses类的方法 f 输出为:", x.f())

运行结果:

很多类都倾向于将对象创建为有初始状态的。

因此类可能会定义一个名为 __init__() 的特殊方法(构造方法),像下面这样:

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

二、类的继承

Python 同样支持类的继承,如果一种语言不支持继承,类就没有什么意义;

python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。

示列:

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj
# 定义一个人的父类
class people:
# 定义基本属性
    name = ‘‘
    age = 0
# 定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
# 定义构造方法
    def __init__(self, n, a, w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" % (self.name, self.age))
# 学生类继承父类方法
class student(people):
    grade = ‘‘
    def __init__(self, n, a, w, g):
# 调用父类的构函
        people.__init__(self, n, a, w)
        self.grade = g
# 覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级" % (self.name, self.age, self.grade))

s = student(‘小明明‘, 10, 60, 3)
s.speak()

运行结果:

三、类的专有方法

四、类的多态性

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj
#多态是同一种事物的多种形态
#第一:定义了一个动物(dongwu)的一个父类
class dongwu:
    def talk(self):
        print(‘正在叫‘)
class People(dongwu): #继承父类
    def talk(self):
        print(‘say hello‘)
class Pig(dongwu):    #继承父类
    def talk(self):
        print(‘哼哼哼‘)
class Dog(dongwu):    #继承父类
    def talk(self):
        print(‘汪汪汪‘)

#多态性
peol=People()
pigl=Pig()
dogl=Dog()

def func(x):
    x.talk()

func(peol)
func(pigl)
func(dogl)

运行结果:

第五、类的封装属性

类封装--后的属性方法调用方式

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj
#类的封装属性
class People:
    def __init__(self,name,age,sex):
        self.__name=name  #__name代表封装了name
        self.__age=age
        self.__sex=sex

 #封装后的类方法的调用
    def tell_info(self):#次函数作用是通过开放一个接口形式对外开放进行调用
        print(‘人的名字是:%s,人的性别是:%s,人的年龄是:%s‘%(
            self.__name,#p.__name
            self.__sex,
            self.__age
        ))

#实列化
p=People(‘zhaosj‘,25,‘male‘)
print(p.__dict__)
p.tell_info()

运行结果:

类封装--后的属性方法设置以及修改方式

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj
#类的封装属性
class People:
    def __init__(self,name,age):
        self.__name=name  #__name代表封装了name
        self.__age=age

    #调取属性
    def tell_info(self): #次函数作用是通过开放一个接口形式对外开放进行调用
        print(‘人的名字是:%s,人的年龄是:%s‘%(
            self.__name,#p.__name
            self.__age
        ))
    #修改属性
    def set_info(self,x,y):
            self.__name=x
            self.__age=y

###########实列化###################
####修改前
p=People(‘zhaosj‘,25)
p.tell_info()
####修改后
p.set_info(‘jiangchao‘,23)
p.tell_info()

运行结果:

类封装--后的属性方法设置以及修改--if..判断修改的数据类型

isinstance:是不是

raise TabError:数据类型错误

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj
#类的封装属性
class People:
    def __init__(self,name,age):
        self.__name=name  #__name代表封装了name
        self.__age=age

    #调取属性
    def tell_info(self): #次函数作用是通过开放一个接口形式对外开放进行调用
        print(‘人的名字是:%s,人的年龄是:%s‘%(
            self.__name,#p.__name
            self.__age
        ))
    #修改属性
    def set_info(self,x,y):
        if not isinstance(x,str): #判断下,名字x是不是字符串类型
            raise TypeError(‘名字必须是字符串类型‘)#报错,类型错误
        if not isinstance(y,int): #判断下,年龄y是不是整形类型
            raise TabError(‘年龄必须是整数类型‘)

        self.__name=x
        self.__age=y

####实列化######
##修改前
p=People(‘zhaosj‘,25)
p.tell_info()
##修改后
p.set_info(‘jiangchao‘,23)
p.set_info(‘jiangchao‘,‘23‘)#设置年龄不是整型是字符串
p.tell_info()

运行结果:

类-封装--property(特殊函数)的使用

不是使用property

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj
class Foo:
    def test(self):
        print(‘from foo‘)

#实列化
f=Foo()
f.test()#加括号进行调用

运行结果:

使用property

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author:zhaosj
#property的使用
class Foo:
    @property
    def test(self):
        print(‘from foo‘)

f=Foo()
f.test

运行结果:

时间: 2024-10-02 08:39:20

<07day>_面向对象的相关文章

Python基础(17)_面向对象程序设计(抽象类、继承原理、封装、多态,绑定方法)

一.抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 1.在python中实现抽象类 import abc #利用abc模块实现抽象类 class All_file(metaclass=abc.ABCMeta): all_type='file' @abc.abstractmethod #定义抽象方法,无需实现功能 def read(self): '子类必须定义读功能' pass @abc.abstractmethod #定义抽象方法,无需实现功能 def write(sel

javase(5)_面向对象

一.概述 1.面向对象是一种思想,让我们由执行者变成指挥者,执行者是面向过程,指挥者是面向对象.例如人开冰箱门,开冰箱门这个动作应该属于门而不是人,冰箱自己最清楚门应该怎么开,人只是调用了冰箱的这个动作. 2.面向对象开发例子 1.电脑坏了,找个修电脑的人,我们调用修电脑这个人修电脑的功能即可,自己不需要知道具体怎么修;2.公司老板找人完成软件开发... 3.开发的时候先想是否java已经实现了这个功能,找这个对象拿过来用,如果没有,自己造一个对象来用,自己能用别人也能用,开发就是找对象,找不到

python基础_面向对象进阶

@property装饰器 之前我们讨论过Python中属性和方法访问权限的问题,虽然我们不建议将属性设置为私有的,但是如果直接将属性暴露给外界也是有问题的,比如我们没有办法检查赋给属性的值是否有效.我们之前的建议是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作.如果要做到这点,就可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问

面对对象_面向对象的概念、类与对象的关系

面向对象的基本概念: 1.什么是面向对象 1.面向对象是一种编程思想 2.面向对象是一种思考问题的思维方式 2.建立面向对象的思维方式 1.先整体,再局部 2.先抽象,在具体 3.能做什么,再怎么做 3.如何学习面向对象 1.掌握一门面向对象语言的语法 2.熟悉面向对象的设计原则 3.熟悉面向对象的设计模式 面对对象的概述:   1.面对对象的三个特征(公认的):封装,继承,多态.(也可以说是四大特征:封装,继承,多态,抽象)   2.开发中先找对象,没有就建立一个对象,实际就是找对象,建立对象

软件评测师笔记_面向对象设计方法学20161020

面向对象方法学概述 究竟怎样才算真正的"面向对象"(Object-Oriented,OO)呢?Peter Coad和Edward Yourdon提出了下列等式: 面向对象 = 对象(Objects) + 类(Cclasses) + 继承(Inheritance) + 消息通信(Communication With Messages) 1)对象与封装 对象(Object)是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位.面向对象的软件系统是由对象组成的,复杂的对象由比较简单

黑马程序员_面向对象

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- 在Java的开发过程,其实就是不断的创建对象,使用对象,指挥对象做事情.设计的过程,其

Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点:扩展性差 面向对象的程序设计:核心是对象,对象是特征(变量)与技能(函数)的结合体,是一种上帝式的思维方式 优点:解决了程序的扩展性 缺点:可控性差 二.类和对象 以游戏举例,基于面向对象设计一个款游戏:英雄联盟,每个玩家选一个英雄,每个英雄都有自己的特征和和技能,特征即数据属性,技能即方法属性,特

黑马程序员_面向对象解决的一个小问题,觉得还好,就存一下

/** *10. 一位老农带着猫.狗.鱼过河,河边有一条船,每次老农只能带一只动物过河. *当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题. *编程解决猫狗鱼过河问题. * *分析: * 问题中的对象:猫.狗.鱼.老农.岸1(这岸).岸2(对岸) * * * 限制条件是:老农每次只能带一只动物过河 * 老农不在时,狗咬猫 * 老农不在时,猫吃鱼 * 目标是:将猫.狗.鱼从这岸运到对岸. * 当农夫到达一个岸后,即为一个中间状态,则这个中间状态需要满足,岸

Python_oldboy_自动化运维之路_面向对象2(十)

本节内容: 面向对象程序设计的由来 什么是面向对象的程序设计及为什么要有它 类和对象 继承与派生 多的态与多态性 封装 静态方法和类方法 面向对象的软件开发 1.面向对象程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 2.什么是面向对象的程序设计及为什么要有它 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了程