python基础-day17

先来点,有趣的小故事,
# 在文件操作中,可以以是否有b来分为按字符操作和字节操作,
# 我们目前可能都是用非b,即字符模式来操作,
# 但是当你学到网络的时候,你就会开始使用b模式了,
# 因为数据的传输是以电信号的方式来传输的,所以还得回归最原始的二进制!!!

前面我们先学习了闭包,然后又学习了装饰器,装饰器比闭包难理解,
看这里!!!其实装饰器是闭包的一个小知识点,一种经典的应用,
在后面要讲的对象中,我就看到了闭包的影子,


# 前端的html,css等,
# 如何与后端的python数据库联系起来呢?
# 就是框架!!!


# 景老师的例子,
# 其实是在帮助我们从函数到类,理解上的过渡,
# 其过程倒是一个蛮开拓思维的,以后总复习的时候,值得看看,
# 
# 从之前的函数到现在的类,
# 以及我们之后将从面向过程向面向对象过渡,
# 注意!!!之前写程序,很容易出现相似的代码,用老师的话说,这些代码都可以尝试合并,
# 同样的,从函数到类,从过程到对象,其实都暗含着走向通用!!!的方向,
# 代码越写越小,越来越精妙,也越来越富含变化!!!
# 代码会有这种发展,或许不是巧合,

class Person:
    静态变量 = 'person'   # 静态属性
    def f1(self):     # 动态属性 方法(函数)  默认带一个参数self
        print(1234567)
print(Person.__dict__)   # 内置的双下方法
print(Person.__dict__['静态变量'])
# Person.__dict__['静态变量'] = 456
#上面这句报错,提示:TypeError: 'mappingproxy' object does not support item assignment,mappingproxy中文意思,代理,
#上面的方式修改报错,下面的方式就可以修改,
#是不是可以这样想,火车票代售点不支持退票,因为火车站系统,系统支持还没到这么远,
Person.静态变量=456     #不会报错,is ok
print(Person.__dict__['静态变量'])  #打印:456,说明修改成功,
# del Person.静态变量
print(Person.__dict__)      #经过上面的del后,打印就没有【静态变量】了,
#!!!!注意一下,上面的例子还没有创建对象
#!!!!再注意下,静态变量,是不是类级别的变量,而不是对象级别的变量

p1 = Person()
p1.静态变量=999
print((p1.静态变量))    #打印:999
p2 = Person()
p2.静态变量=10000
print((p2.静态变量))    #打印:10000
print((Person.__dict__['静态变量']))    #打印:456,和前面的一样,
#对象和类中的静态变量,从这里来看,不是一个呢!!!!!

#Python下一切皆对象
#__dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值,再结合mappingproxy中文意思,代理,来理解下,

#这里留下点问题,
#1,关于静态变量,类不可改,而对象可以改,是什么意思??还是我听错了??
#2,还有上面的多个对象的静态变量,不是同一个,何解??

# 景老师把类中的数据和方法,
# 称为静态属性 and 动态属性,这是一个很新鲜的理解角度!!!


class Person:
    role = 'person'   # 静态属性
    def __init__(self,name,sex,hp,ad):
        self.name = name     # 对象属性 属性
        self.sex = sex
        self.hp = hp
        self.ad = ad
    def attack(self):
        print('%s发起了一次攻击'%self.name)

alex = Person('a_sb','不详',1,5)
boss_jin = Person('金老板','女',20,50)

alex.attack()      # Person.attack(alex)
boss_jin.attack()  # Person.attack(boss_jin)
# 最后两句注释,调用方式的角度,值得再看次
#这个self,就代表你生成的对象本身,




alex = Person('a_sb','不详',1,5)
alex.__dict__['name'] = 'alex'
print(alex.name)
alex.name = 'a_sb'
print(alex.name)
# boss_jin = Person('金老板','女',20,50)
# print(boss_jin.name)
# 实例化的过程:
    # 1.创造一个实例,将会作为一个实际参数  # python
    # 2.自动触发一个__init__的方法,并且把实例以参数的形式传递给__init__方法中的self形参
    # 3.执行完__init__方法之后,会将self自动返回给alex
# __init__方法 :初始化方法,给一个对象添加一些基础属性的方法,一般情况下是针对self的赋值
# 对象
    # 在类的内部 self是本类的一个对象!!!!!!!最开始的self字典就是类内部的self对象吗???
    # 在类的外部,每一个对象都对应着一个名字,这个对象指向一个对象的内存空间
    # 属性的调用:
        # 对象名.属性名               第一种调用方法
        # 对象名.__dict__['属性名']   第二种调用方法     #把第二种方式优化,或者说简化后就得到第一种调用方法
    # 方法的调用 :
        # 类名.方法名(对象名)  # 那么方法中的self参数就指向这个对象
        # 对象名.方法名()      # 这样写 相当于  方法中的self参数直接指向这个对象
# ps:类中的方法,其参数必须带self和这里通过类调用函数方法,并传入对象self指针,有某种暗合,

这里关于静态变量的两个问题,day18开头,我给你解答,


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值