python面向对象学习一 ---面向对象基础

面向对象

语言的分类

面向机器 : 抽象成机器指令,机器容易理解的语言,代表汇编语言

面向过程 :可以步骤化,按部就班的处理,代表C语言

面向对象 : 代表 python java

什么是面向对象呢?

一种认识世界,分析世界的方法论,将万事万物抽象为各种对象,

类class

类是抽象的概念,是万事万物的抽象,是一类事物的共同特

用计算机语言来描述类,是属性和方法的集合

对象 instance object

对象是类的具体,是一个实体

对于我们人这个个体,都是抽象概念人类的不同的实体

属性: 它是对象状态的抽象,用数据结构来描述

操作:它是对象行为的抽象,用操作和实现该操作的方法来描述

每个人都是人类的一个单独的实例,都有自己的名字,身高,体重等信息,这些信息是个人的属性,但是,这些信息不能保存在人类中,因为它是抽象的概念,不能保留具体的值

而人类的实例,是具体的人,他可以存储这些具体的属性,而且可以不同人有不同的属性

哲学:

一切皆对象,对象是数据和操作的封装

对象是独立的,但是对象之间可以相互作用

面向对象3要素


  1. 封装

    • 组装 :将数据和操作组装到一起
    • 隐藏数据: 对外只暴露一些接口
  2. 继承

    • 多复用
    • 多继承少修改
  3. 多态

    • 面向对象编程最灵活的地方,动态绑定
      人类就是封装,
      人类继承自动物类,孩子继承父母特征.分别单一继承,多继承
      多态,继承自然动物的人类,猫类的操作’吃’不同

Python 的类


定义

class ClassName:
    语句块
  1. 必须使用class关键词
  2. 使用大驼峰,首字母大写
  3. 类定义完成后,就产生了一个类对象,绑定到了标识符ClassName上
class FirstClass:
    """This is a first class"""  # 文档字符串
    x = 'abc'  # x 称为类变量,类属性 
    def foo(self):  # class 内定义的函数称为method (方法)
        print('foo method')
FirstClass.__doc__,FirstClass.__name__
>>> 'This is a first class', 'FirstClass'
FirstClass.x  # 成员操作符,通关. 便可以访问 x 
FirstClass.foo  # 没加括号不调用,
>>><function __main__.FirstClass.foo(self)>
FirsrClass.foo()
>>>会报错,类对象直接调用函数,但缺少一个参数self

类内部定义的函数与参数,外部不可以使用,限定了作用域

x , foo() 都会报错

类对象及类属性

  • 类对象 类的定义执行后会生成一个类对象
  • 类的属性 类定义中的变量和类中的定义的方法都是类属性
  • 类变量

foo 方法是类的属性,如同吃是人类的方法,但是每一个具有的人才能吃东西,也就是说吃是人的实例调用的方法 .

foo是方法method ,本质上就是普通的函数对象function 他一般要求至少有一个参数,第一个形式参数可以是self (self只是个惯用标识符,可以换名字),这个参数位置就留给了self

self 指代当前实例本身

实例化

a = FirstClass()# 加个括号就可以调用 

使用上面的语法,在类对象名称后面加上一个括号就调用类的实例化方法完成实例化
实例化就真正创建一个该类的对象(实例) (除单类之外)

每次实例化后获得的实例,是不同的实例,即使是使用同样的参数实例化,也得到不一样的对象
Python 类实例后,会自动调用_init_ 方法.这个方法第一个形式参数必须留给self,其他参数随意

class Person:
    def  __init__(self,name,age):  #魔术方法 初始化过程  第一参数限定给self
        """初始化出厂设置,对生成的实例进行属性配置"""
        self.name = name   # self 为实例,self.name 的属性为name 
        self.age = age
        #__init__ 方法不能有返回值
    def showage(self):
        print(self.age,self.name)
t = Person('tom',20) # 实例化
j = Person('Jerry',20)
t,j
>>>(<__main__.Person at 0x5c2eef0>, <__main__.Person at 0x5c2eeb8>)
t.name,t.age # 实例的属性
>>>('tom', 20)
t.showage
>>><bound method Person.showage of <__main__.Person object at 0x0000000005C2EEF0>>
t.showage(),j.showage()
>>>20 tom   |   20 Jerry

实例对象instance \ object

类实例化后一定会获得一个类的实例,就是实例对象
上例的t, j 就是实例

类实现化后,得到一个实例对象,调用方法时采用j.showage()的方式,实例对象会绑定到方法丄.
但是该函数签名是showage(self),少传一个参数self会报错么?
这个self就是jerry,jerry.showage()调用时,会把方法的调用者jerry实例作为第一参数self的实参传入。
self.name就是jerry对象的name,name是保存在了jerry对象上,而不是Person类上。所以,称为 实例变量

实例变量与类变量

实例变量是每一个实例自己的变量,是自己独有的;类变量是类的变量,是类的所有实例共享的属性和方法

特殊属性 含义
_name_ 对象名
_class_ 对象的类型 type (type(ClassName)) 相当于 ClassName._type_
__dict__★★★★ 对象属性的字典
_qualname_ 类的限定名

Persion._dict_

Persion.__dict__
mappingproxy({
   '__module__': '__main__',
              'a': 200,
              '__init__': <function __main__.Persion.__init__(self, name)>,
              'showage': <function __main__.Persion
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值