python课堂整理33----面向对象(我的对象又在哪里)

一、面向对象设计(Object Oriented Design)

将一类具体事物的数据和动作整合到一起,即面向对象设计

理解两个概念:

类:把一类事物的相同的特征和动作整合到一起就是类,类就是一个抽象的概念

对象:就是基于类而创建的一个具体的事物(具体存在的),也就是特征和动作整合到一起

例:

def people(gender,country):  #定义一个“人”的类
    def init(gender, country): #相当于初始化
        dir = {               #人的特征和动作
            "gender":gender,
            "country": country,
            "eat": eat,
            "sleep":sleep
        }
        return dir
    def eat(dir):
        print("%s %s正在吃饭"%(dir["country"], dir["gender"]))

    def sleep(dir):
        print("%s %s正在睡觉"%(dir["country"], dir["gender"]))
    return init(gender, country)

p1 = people("man", "China") #得到的是一个字典
p1["eat"](p1)               #通过字典取值调用函数,函数需要的参数在字典里
p2 = people("女人", "日本")
p2["sleep"](p2)

  

二、面向对象编程(Object oriented Programming)

用定义类 + 实例/对象的方法去实现面向对象的设计

实例化:由类生产对象的过程叫实例化,类实例化的结果就是一个对象,或者叫做一个实例(实例 = 对象)

.....
class  类名 :
    ‘类的文档字符串‘
    类体

.....
class Chinese:
    ‘这是一个中国人的类‘
    pass

#实例化
p1 = Chinese() #就相当于函数的return返回的结果
print(p1)
#经典类
class  类名 :
    ‘类的文档字符串‘
    pass

#新式类
class 类名(object) :
    pass

在python2中,经典类和新式类不同,在python3中都归为新类

三、属性相关知识

1. 数据属性:就是变量

2. 函数属性:就是函数,在面向对象里通常称为方法

注意:类和对象均用点来访问自己的属性

class Chinese:
    ‘这是一个中国人的类‘
    dang = ‘gong chan党‘

print(Chinese.dang)

class Chinese:
    ‘这是一个中国人的类‘
    dang = ‘gong chan党‘
    def helpp():
        print("一个人正在帮助老奶奶")
    def jump_queue(self):
        print("插到了前面")

print(Chinese.dang)
Chinese.helpp()
Chinese.jump_queue("暂时随便传个参数")

class Chinese:
    ‘这是一个中国人的类‘
    dang = ‘gong chan党‘
    def helpp():
        print("一个人正在帮助老奶奶")
    def jump_queue(self):
        print("插到了前面")

print(dir(Chinese)) #以列表形式存放属性名
print(Chinese.__dict__) #查看字典属性
#类的点方法就是到属性字典里面取值
print(Chinese.__dict__["dang"])
Chinese.__dict__["helpp"]()
Chinese.__dict__["jump_queue"]("暂时随便传个参数")

四、特殊的类属性

class Chinese:
    ‘这是一个中国人的类‘
    dang = ‘gong chan 党‘
    def helpp():
        print("一个人正在帮助老奶奶")
    def jump_queue(self):
        print("插到了前面")

print(Chinese.__name__) #类名字符串
print(Chinese.__doc__)# 类文档字符串
print(Chinese.__base__) #类的老祖先(讲继承时讲)
print(Chinese.__bases__)#类的祖先元组形式
print(Chinese.__module__) #类所在的模块
print(Chinese.__class__) #实例该类对应的类

  

五、对象相关知识

class Chinese:
    ‘这是一个中国人的类‘
    dang = ‘gong chan 党‘
    def __init__(self, name, age, gender):  #初始化,实例化类的时候自动调用
        self.mingzi = name
        self.nianling = age
        self.xingbiie = gender

    def helpp():
        print("一个人正在帮助老奶奶")
    def jump_queue(self):
        print("插到了前面")

#实例化,就是调用__init__的过程,实例化的结果不包括函数属性,只有数据属性。
p1 = Chinese(‘金灵‘, 19, ‘girl‘)
print(p1.__dict__) #得到init中初始化的字典数据
print(p1.__dict__["nianling"])
print(p1.nianling)  #下面这个是通过点方法直接查看年龄,其内部就是上面那个过程

class Chinese:
    ‘这是一个中国人的类‘
    dang = ‘gong chan 党‘
    def __init__(self, name, age, gender):  #初始化,实例化类的时候自动调用
        self.mingzi = name
        self.nianling = age
        self.xingbiie = gender

    def helpp():
        print("一个人正在帮助老奶奶")
    def jump_queue(self):
        print("{}插到了前面".format(self.mingzi))

#实例化,就是调用__init__的过程,实例化的结果不包括函数属性,只有数据属性。
p1 = Chinese(‘乔碧萝‘, 58, ‘wuman‘)
Chinese.jump_queue(p1)  #太low,用下面的对象方法调用
p1.jump_queue()
p1.helpp()  #会报错,因为在python底层,会把这行代码写成 p1.helpp(p1),而函数本身不需要参数

  

 

self的意义:

self 就是实例本身,这里指 p1

class Chinese:
    ‘这是一个中国人的类‘
    dang = ‘gong chan 党‘
    def __init__(self, name, age, gender):  #初始化,实例化类的时候自动调用
        self.mingzi = name
        self.nianling = age
        self.xingbiie = gender

    def helpp():
        print("一个人正在帮助老奶奶")
    def jump_queue(self):
        print("{}插到了前面".format(self.mingzi))

#实例化,就是调用__init__的过程,实例化的结果不包括函数属性,只有数据属性。
p1 = Chinese(‘乔碧萝‘, 58, ‘wuman‘)
#调用jump_queue函数时,先在p1所在的init下(即p1.__dict__)下去找,找不到去外面一层找,即类字典下(Chinese.__dict__)
#即函数属性跟类要
p1.jump_queue()

  

 

原文地址:https://www.cnblogs.com/dabai123/p/11408998.html

时间: 2024-10-06 23:41:34

python课堂整理33----面向对象(我的对象又在哪里)的相关文章

python课堂整理4---列表的魔法

一.list   类, 列表 li = [1, 12, 9, "age", ["大白", "小黑"], "alex"] 1. 中括号括起来 2. 逗号分割每个元素 3. 列表中的元素可以是数字.字符串.列表.布尔值等 4. 索引取值 5. 切片取值---->得到的还是列表 6. for循环 7. while 循环 8. 支持 in 操作 列表在内存中是以链表形式存储,可以被修改 二.列表灰魔法 1.修改 li = [1,

python课堂整理5---元组

一.元组   Tuple tu = (111, 22, 33, "alex", (11,22), [(33, 44)], True, ) 元组元素不可被修改,不能被增加或删除 一般写元组的时候,推荐在最后加入“ , ” 支持索引取值 支持切片取值 可被 for 循环,是可迭代对象 #字符串转元组 s = "dabai" v = tuple(s) print(v) 用同样的方法,列表也可以转换为元组,元组也可以转换为列表 如果元组里只有字母,可以用join方法组合为新

python课堂整理14---函数式编程

一.分类 当下主流的编程方法大体分为三类 1. 面向过程 2. 函数式 3. 面向对象 二.函数式编程:函数式 = 编程语言定义的函数 + 数学意义的函数 特征:1. 不可变数据 2. 第一类对象 3. 尾调用优化(尾递归) 例一.不可变:不用变量保存状态,不修改变量 #非函数式 a = 1 def test1(): global a a += 1 return a b = test1() print(b) #函数式 n = 1 def test2(n): return n + 1 print(

python课堂整理16---内置函数

1. abs :求绝对值 print(abs(-1)) 2. all()传入一个可迭代对象,对该对象进行bool值运算,若都为True 就返回True,有一个为假,就返回False print(all([12,'asds',345])) print(all('')) #特例 若参数为空也返回True print(all((0,))) print(all([])) 3. any () 和all()相反,只要有一个为真就返回Ture print(any([1231, 0])) print(any([

python课堂整理26 ---json、pickle、shelve模块(序列化处理)

一.序列化 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,python中叫pickling 序列化之后就可以把序列化后的内容写入磁盘或通过网络传输到别的机器上 反序列化:unpickling,也就是loads的过程 二.json模块 功能:处理成字符串 可以让不同语言间进行数据交换 import json dic = {"name": "alex"} data = json.dumps(dic) print(data, type(data)) 经js

python课堂整理23----模块介绍

一.模块 概念:一个 .py文件就被称之为一个模块 分三类:•python标准库 •第三方模块 •应用程序自定义模块 例图中的study1.py称为执行文件,一般命名为 bin.py  , cal.py称为被调用文件,里面一般写功能代码 二.模块的调用方式: import的作用: ①执行对应的文件(先把调用文件执行一遍) ②引入变量名 导入方式: import <模块名>(as  别名) from <模块名> import <函数名>(as 别名) from <模

python课堂整理28----re模块

一.正则(re) 就其本质而言,正则表达式(或re)就是一种小型的.高度专业化的编程语言,它内嵌在python中,并通过re模块实现. 正则表达式模式被编译成一系列的字节码,然后由用c语言编写的匹配引擎执行. 用途:模糊匹配 元字符:. ^ $ * + ? {} [] |  () \ ♦通配符 ‘ . ’(除\n以外都可以代替) 一个点代表一个其它任意字符 两个点代表2个字符 <以下程序都是在pycharm交互环境下运行> findall 会匹配所有内容,符合条件的都返回到一个列表 impor

python课堂整理34----类的增删改查及实例属性增删改查

一.类的增删改查 类里面定义的函数,第一个参数一定要写 self ,因为class的特殊性 定义类名:首字母大写 函数属性命名:动词加名词(即干什么事) class Chinese: country = 'China' def __init__(self,name): self.name = name def play_ball(self, ball): print("%s 正在打%s"%(self.name,ball)) p1 = Chinese('sb') #实例化 print(C

python课堂整理3---字符串魔法

字符串魔法 1.首字母大写功能 test = "alex" v = test.capitalize() print(v) 2.所有变小写(casefold更厉害,可以将很多未知的其他国家字符变小写) test = "ALex" v1 = test.casefold() print(v1) v2 = test.lower() print(v2) 3.设置宽度,并将内容居中,20代指总长度,*为空白位置填充一个字符,可有可无. test = "alex&quo