学习Python基础--------6面对对象进阶

上节回顾


属性
实例变量(存在每个实例的内存里)
类变量(存在类里,共享使用)
私有属性__var

方法
构造方法 __init__
析构方法 __del__ (实例打开链接临时文件关闭后销毁)
私有方法

对象:实例化一个类之后得到的对象

封装
把一些功能的实现细节不对外暴露

续承
继承方式
继承
组合

代码的重用
单级成
多继承
2.7 广度优先新式类,深度优先经典类
3.0 都是广度优先
class Foo(School)

  def __init__(self,name,age,sex,salary,course):
  #新式类
  super(Foo,self).__init__(name,age,sex)
  #经典类
  School.__init__(self,name,age,sex)
  #组合
  self.person = person

    self.salary = salary
    self.course = course
多态
接口重用,一种接口多种实现

静态方法

通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法?

普通方法可以实例化调用,并且方法里可以通过self.通用实例变量或类变量,但静态方法是不可以访问实例变量和实例变量,它与类唯一的关联就是需要通过类名来调用这个方法

class Dog(object):
    def __init__(self,name):
        self.name = name

  #方法
    def eat(self,food):
        print(‘%s is eating %s‘%(self.name,food))

d = Dog(‘cehngronghua‘)

d.eat(‘baozi‘)

#输出cehngronghua is eating baiozi

##############
class Dog(object):
    def __init__(self,name):
        self.name = name

    @staticmethod    #和类什么关系  ,只是相当于函数
    def eat(self,food):
        print(‘%s is eating %s‘%(self.name,food))

d = Dog(‘cehngronghua‘)

d.eat(d,‘zhiyu‘)   #独立的函数重新传入值
#输出  cehngronghua is eating zhiyu

类方法

类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量

# Author:Zhiyu Su

class Dog(object):
    name = 1233
    def __init__(self,name):
        self.name = name

    @classmethod
    def eat(self):
        print(‘%s is eating %s‘%(self.name,‘dd‘))

d = Dog(‘cehngronghua‘)

d.eat()
#输出  1233 is eating dd    直接调用类的变量

属性方法

把一个方法变成一个属性  所以调用直接调用不用输入括号

# Author:Zhiyu Su

class Dog(object):

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

    @property   #attribute  属性
    def eat(self):
        print(‘%s is eating %s‘%(self.name,‘dd‘))

d = Dog(‘cehngronghua‘)

# d.eat()#调用时会报错‘NoneType‘ object is not callable

d.eat
#输出cehngronghua is eating dd

属性方法@eat.setter
##################
# Author:Zhiyu Su

class Dog(object):

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

    #方法变成属性
    @property   #attribute  属性
    def eat(self):
        print(‘%s is eating %s‘%(self.name,‘dd‘))

    #如果要给eat设置属性需要重新设立一个eat
    @eat.setter
    def eat(self, food):
        print(‘set to food :‘, food)

d = Dog(‘cehngronghua‘)

# d.eat()#调用时会报错‘NoneType‘ object is not callable

d.eat

d.eat = ‘baozi‘

#  输出 cehngronghua is eating dd    set to food : baozi

##################

#调用 @eat.deleter删除

# Author:Zhiyu Su

class Dog(object):

    def __init__(self,name):
        self.name = name
        self.__food = None

    @property
    def eat(self):
        print(‘%s is eating %s‘%(self.name,self.__food))

    @eat.setter
    def eat(self, food):
        print(‘set to food :‘, food)
        self.__food = food

    @eat.deleter
    def eat(self):
        del self.__food
        print(‘删完了‘)

d = Dog(‘cehngronghua‘)

d.eat#调用 @property  eat

d.eat = ‘baozi‘  #调用@eat.setter
del d.eat        # 调用 @eat.deleter

属性方法的实例

# Author:Zhiyu Su

class Flight(object):
    def __init__(self,name):
        self.flight_name = name

    def checking_status(self):
        print(‘cheking flight %s tatus‘ % self.flight_name)
        return 1

    @property
    def flight_status(self):
        status = self.checking_status()
        if status == 0:
            print(‘filight got cancelend...‘)
        elif status == 1:
            print(‘flighrt is arried...‘)
        elif status == 2:
            print(‘filght has de partured already...‘)
        else:
            print(‘cannot confirm the flight staus....,please check later‘)
    @flight_status.setter
    def flight_status(self,status):
        print(‘Flight %s has changed status to %s‘%(self.flight_name,status))

f = Flight(‘CA980‘)
f.flight_status
#对用户端口
f.flight_status = 2
f.flight_status

类的特殊成员方法

1.__doc__ 表示类的描述信息

# Author:Zhiyu Su

class Dog(object):
    ‘‘‘这个对象是狗‘‘‘

    def __init__(self,name):
        self.name = name
        self.__food = None

    @property
    def eat(self):
        print(‘%s is eating %s‘%(self.name,self.__food))

d = Dog(‘cehngronghua‘)

print(Dog.__doc__)
#输出 打印类的描述性信息‘这个对象是狗’

2.__module__和__class__

__module__ 表示当前操作的对象在哪个模块

__class__  表示当前操作的对象的类是什么

时间: 2024-08-26 06:27:50

学习Python基础--------6面对对象进阶的相关文章

35.python全栈之路:面对对象进阶

面对对象进阶 1.多继承中的self class A: def bar(self): print('BAR') self.f1() ''' self本身代表的D类的对象d1 d1如果要在他的父类中去寻找f1 首先应该去C类 ''' class B(A): def f1(self): print('B') class C: def f1(self): print('C') class D(C, B): pass d1 = D() d1.bar() 流程分析: d1 = D(),最终找到了objec

面对对象进阶

面对对象进阶 类的继承 python当中,父类和子类(派生类),父类和子类只有在继承的时候才会产生 继承是为了拿到父类的所有东西 class Parent_Foo: #父类 def __init__(self, first_name, money, car, house): self.first_name = first_name self.money = money * 0.5 print('继承财产扣掉一半') self.car = car self.house = house def fi

python基础(类、对象、包)完整的总结

python基础(类和对象.包)类和对象对象是看的见摸的着的类是模板对象需要类才能创建出来类的构成(三个部分)类的名称:类名类的属性:一组数据类的方法:允许进行操作的方法(行为)class 类名():def添加方法class Cat():def run(self):print("cat is running")xiaobai = Cat()xiaobai.run()xiaobai.name = "小白"xiaobai.age = 40类的属性属性就是变量一个类可以创

面对对象进阶2

面对对象进阶2 类的封装 封装:隐藏属性或方法,外部无法使用,内部可以使用,再类定义阶段就执行了,真的想引用,就使__类名__属性名 隐藏模块内部的函数/变量_x:from module import *(无法导入),from module import _x(不合理) @property:被 @property 装饰的函数会从函数变成属性,也就是说直接.函数名,不需要加括号使用 class People: def __init__(self,pwd): self.__pwd = pwd @pr

Python基础课:一起学习python基础题

python最近老火了,万能开发语言,很多小伙伴们要么初学,要么从别的开发语言转过来的,如果你能把下面几道基础题不费劲的写出来,基础应该可以打80分,可以进行进阶的学习了,如果下面的题目如果做不出来,拜托不要耽误时间,赶快打好基础,勿在浮沙筑高台. 题目出给新鸟打基础的,实现答案的方法千千万,如果老鸟有更厉害的答案就不要喷了,先谢谢了. 还有新鸟先不要看答案,不要看答案,不要看答案,(重要的事情说三遍)自己先去解,用自己最简单的想法去实现,能用python自带的方法就不要自己造轮子. 好啦,开始

学习python基础规则

前面应该是记流水账的方式,毕竟学习的内容不多无法产出什么有效的内容. 这两天从开始下载Python开始学习,一路顺畅冒的问题,直到开始学习python的游戏规则,严格缩进.注释及‘’的使用等感觉还不错,多看几遍都可以记下来,但是没实操过还是有点记忆较差. python对象,也就是列表等使用规则和特征用导图的方式记忆效果不错: 后面的运算符和语句也是这样这样学习记忆: 你要问我记忆效果怎么样?我的回答是:目前只能理解其中的含义和基础规则,还谈不到复杂的应用上!这些游戏规则打算边实践边应用. 当前学

python基础之面对对象

Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象编程--Object Oriented Programming,简称OOP

Python学习--Python基础语法

第一个Python程序 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: Window上在安装Python时已经已经安装了默认的交互式编程客户端,提示窗口如下: 在Python提示符中输入一下文本,然后按回车查看运行结果: print 'hello world'; 输出: hello world 脚本式编程 让我们来写一个简单的Python脚本,所有的Pytho

Java学习记录(补充二:面对对象基础复习,习题)

求3(可调整)个学员成绩的和或平均分或两者都具package day5; import java.util.Scanner; public class Score { //构造函数 public Score(){ System.out.println("实例化对象调用了我"); } int sum; double avg; // 定义求和的方法 public int sum() { Scanner scanner = new Scanner(System.in); for (int i