Python基础 笔记9

一、笔记说明

  1. 本博客专栏《Python基础》的所有笔记均为.py格式文件,复制后均可无误执行(注意修改文件路径,每个人的工作区不一样)。
  2. 在复制代码时,若代码段标明了文件名称,即该笔记包含多个文件,请注意每个代码段标明的文件名称,并在本地创建文件夹以便于运行。
  3. 代码运行环境Python3.7.9,建议使用Pycharm2020.1作为编辑器,使用Anaconda3作为包管理器。

二、代码部分

# Python笔记10

#类中对象的引用
class Peraon:#完整形式为class Peraon(object):,其中(object)可省略;
    sex="男"#公有属性,编程时有提示且可以在全局范围引用
    _age=18#弱私有属性,编程时无提示,但可以在全局范围引用
    __id=2222222#强私有属性,编程时无提示且不可以在全局范围引用
    def shili(self):
        print("类中的self为所有创建的实例的统称:",self)
    def run(self,cmd):#括号内必须有self,cmd为必备参数 ;
        print("%s要去跑步了,性别:%s!"%(cmd,Peraon.sex))#Peraon.sex引用类本身的属性,但不知道如何引用方法;
        return "他累了!!!"

pe=Peraon()#初始化实例对象Person()类,以pe引用Person实例的所有参数;
cmd="邹栋"
st=pe.run(cmd)
print(st)
print(pe.sex)

pe2=Peraon()#类似于java,可初始化多个类的引用;
st2=pe2.run("kc")#引用类的方法
print(st2)
print(pe2.sex)#引用类的属性
print("1.类中对象的引用:将拥有共同点的对象封装到一个类中,以不同参数调用有部分差异的方法")
print("2.实例化类对象相当于为类起了一个别名,一个类可以有多个别名,然后通过别名.方法/属性的形式使用类的元素")
print("3.即使在类中,要想引用本类的属性/方法依旧需要通过别名.方法/属性的形式去使用")
print("4.前方加一个下划线:弱私有属性,编程时无提示,但可以引用;前方加两个下划线:强私有属性,编程时无提示且不可以引用")
print("公有属性:%s"%(pe.sex))
print("弱私有属性:%d"%(pe._age))
#print("强私有属性:%d"%(pe.__id))#出错,因为无法引用;

print("5.",pe.shili(),"实例集合是不显示的")

print("就近原则基础:")
print("实例属性在类的方法中定义;实例属性(self.)作用于由实例引用的类元素(一般是类方法)"
      "类属性(直接定义的)作用于整个类")
print("6.内部创建实例属性:在类的方法体中添加self.类属性,类方法里必须有含self.的参数且由于就近原则,该参数不可更改")
class Peraon1:
    def run(self,cmd):
        self.sex = "女"#内部创建的实例属性
        print("%s要去跑步了,性别:%s!"%(cmd,self.sex))#self.sex引用实例对象的属性,不可更改;

change=Peraon1()
change.run("kc")

print("7.外部创建/更改实例属性:在外部更改/添加类的方法的self.属性,但其只做用于有self.参数的方法,且先更改/添加,后作用于类方法")
class Peraon2:
    def run(self,cmd):#未定义类方法的self.属性
        print("%s要去跑步了,性别:%s!"%(cmd,self.sex))#self.sex引用实例对象的属性,若内部没有定义,可在外部更改,有警告;

change=Peraon2()
change.sex="fwjfkcn"#先定义
change.run("kc")#后作用于方法
change.sex="65g4v6er5"
change.run("kc")

print("8.实例方法的调用过程与self:\n"
      "一般将默认会传入的那个参数命名为self\n"
      "用来表示调用这个方法本身的实例对象本身\n"
      "所有定义在类中的方法学名为:实例方法")

print("魔法方法")
print("9.1初始化方法:在创建实例的时候/开始运行该类的方法时执行,传入多个参数可供该类所有的方法初始化__init__(self,name,age,sex):"
      "9.2析构方法:在没有用到这个实例/结束时自动运行__del__(self):")
class init1:
    def __init__(self,name,age,sex):#可传入多个参数供该类方法初始化
        self.name=name
        self.age=age
        self.sex=sex
        print("初始化方法:Succeed!!!")

    def __del__(self):
        print("析构方法:结束了!!!")

    def __str__(self):
        """返回一个对象的描述信息"""
        return "名字是:%s , 年龄是:%d" % (self.name, self.age)

    def __repr__(self):
        """返回一个对象的描述信息,主要用于开发者测试"""
        return "Cat:(%s,%d)" % (self.name, self.age)

    def run(self):
        print("%s要去跑步了,性别:%s!"%(self.name,self.sex))

    def eat(self):
        print("%s要去跑步了,性别:%s!年龄%s"%(self.name,self.sex,self.age))

init=init1("kc",18,"男")#执行初始化魔法方法
init.run()
init.eat()

print("10.销毁构建的实例,即结束运行,执行魔术方法__del__()")
del init#销毁实例
# init.run()
# init.eat()
print("上方两行若执行会提示错误,因为init实例已经被销毁")

print("11.从外部修改类属性:修改对应类的实例(可为本类实例)的数据即可,但对其他实例无作用")
class feishili:
    name="kc"
    sex="man"
    def fun(self):
        print("姓名==%s,性别==%s"%(feishili.name,feishili.sex))
print("修改前:")
f=feishili()
p=feishili()
print("f的sex:",f.sex,"         f的name:",f.name)
print("p的sex:",p.sex,"         p的name:",p.name)
print("修改后:")
f.name="kfhcskj"
f.sex="kjnc"
print("f的sex:",f.sex,"         f的name:",f.name)
print("p的sex:",p.sex,"         p的name:",p.name)
print("注意:若修改类的本实例,则会影响所有由该类的本实例初始化的实例数据")
feishili.name="kfhcskj"
feishili.sex="kjnc"
print("f的sex:",f.sex,"         f的name:",f.name)
print("p的sex:",p.sex,"         p的name:",p.name)

print("12.类的3种方法:"
      "静态方法[如果方法不访问类属性/实例属性的情况下定义"
      "类方法[需要访问类的属性而不需要访问实例属性的情况下定义]"
      "实例方法[可以同时访问类的属性,和实例属性]")
#数据准备
class Game:
    def __init__(self,b="我是Game类的实例属性!"):
        self.b=b
    a="我是Game类的类属性!"
    def eg(self):
        print("我是Game类的实例方法!")


#三种类的测试
    def shili(self):
        print("\n这是一个实例方法!")#可引用该类的方法和属性;
        print(Game.a)#引用类的属性
        print(self.b)#引用类的实例属性
        self.eg()#引用类的实例方法

    @classmethod
    def lei(cls):
        print("\n这是一个类方法!")
        print(cls.a)  # 引用类的属性,一般直接用cls代替类名;
        print("不可以引用类的实例属性和实例方法!")
        #print(self.b)  # 不可以引用类的实例属性
        #cls.eg()  # 不可以引用类的实例方法

    @staticmethod
    def jingtai():
        print("\n这是一个静态方法!")
        print(Game.a)  # 引用类的属性
        print("不可以引用类的实例属性和实例方法!")
        #print(self.b)  # 不可以引用类的实例属性
        #Game.eg()  # 不可以引用类的实例方法

gg=Game()
gg.shili()
gg.lei()
gg.jingtai()


market='''
    1. __add__(self, other) 定义加法的行为: +
    2. __sub__(self, other) 定义减法的行为: -
    3. __mul__(self, other) 定义乘法的行为: *
    4. __truediv__(self, other) 定义真除法的行为: /
    5. __floordiv__(self, other) 定义整数除法的行为: //
    6. __mod__(self, other) 定义取模算法的行为: %
    7. __divmod__(self, other) 定义当被 divmod() 调用时的行为
    8. divmod(a, b) 把除数和余数运算结果结合起来,返回一个包含商和余数的元组 (a // b, a % b)
    9.__pow__(self, other[, module]) 定义当被 power() 调用或 ** 运算时的行为
    10. __lshift__(self, other) 定义按位左移位的行为: <<
    11. __rshift__(self, other) 定义按位右移位的行为: >>
    12. __and__(self, other) 定义按位与操作的行为: &
    13. __xor__(self, other) 定义按位异或操作的行为: ^
    14. __or__(self, other) 定义按位或操作的行为: |'''
print("13.魔术方法:算术运算符",market)


market='''
    1. __radd__(self, other) 定义加法的行为: +
    2. __rsub__(self, other) 定义减法的行为: -
    3. __rmul__(self, other) 定义乘法的行为: *
    4. __rtruediv__(self, other) 定义真除法的行为: /
    5. __rfloordiv__(self, other) 定义整数除法的行为: //
    6. __rmod__(self, other) 定义取模算法的行为: %
    7. __rdivmod__(self, other) 定义当被 divmod() 调用时的行为
    8. __rpow__(self, other[, module]) 定义当被 power() 调用或 ** 运算时的行为
    9. __rlshift__(self, other) 定义按位左移位的行为: <<
    10. __rrshift__(self, other) 定义按位右移位的行为: >>
    11. __rand__(self, other) 定义按位与操作的行为: &
    12. __rxor__(self, other) 定义按位异或操作的行为: ^
    13. __ror__(self, other) 定义按位或操作的行为: |'''
print("14.魔术方法:反算术运算符,如果方法从左开始执行没有实现或者不支持相应的操作,"
      "那么Python就会从右侧开始执行方法",market)


market='''
    1. __iadd__(self, other) 定义赋值加法的行为: +=
    2. __isub__(self, other) 定义赋值减法的行为: -=
    3. __imul__(self, other) 定义赋值乘法的行为: *=
    4. __itruediv__(self, other) 定义赋值真除法的行为: /=
    5. __ifloordiv__(self, other) 定义赋值整数除法的行为: //=
    6. __imod__(self, other) 定义赋值取模算法的行为: %=
    7. __ipow__(self, other[, modulo]) 定义赋值幂运算的行为: **=
    8. __ilshift__(self, other) 定义赋值按位左移位的行为: <<=
    9. __irshift__(self, other) 定义赋值按位右移位的行为: >>=
    10. __iand__(self, other) 定义赋值按位与操作的行为: &=
    11. __ixor__(self, other) 定义赋值按位异或操作的行为: ^=
    12. __ior__(self, other) 定义赋值按位或操作的行为: |='''
print("14.魔术方法:增量赋值运算符",market)


market='''
    1. __neg__(self) 定义正号的行为: +x
    2. __pos__(self) 定义负号的行为: -x
    3. __abs__(self) 定义当被 abs() 调用时的行为
    4. __invert__(self) 定义按位求反的行为: ~x'''
print("14.魔术方法:一元运算符",market)

三、转载说明

  1. 本文内容完全原创,文章完成时间2021.3.16。
  2. 若要转载本文,请在转载文章末尾附上本文链接:https://blog.csdn.net/qq_35772105/article/details/114904647
  3. 本文代码部分唯一MD5:3F1FF4779829250E85845FE14D01326B。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔菲赫伯特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值