#|Python基础——类和对象与魔法方法


文章目录

  • 类和对象
    • 一.对象=属性+方法
    • 二.面向对象编程
    • 三.继承
    • 四.多重继承
    • 五.组合
    • 六.类,类对象和实例对象
    • 七.绑定
    • 八.一些相关的BIF
  • 魔法方法(1)
    • 一.构造和析构
    • 二.算术运算
  • 第一次考核总结

类和对象 一.对象=属性+方法 一个对象的特征称为"属性",一个对象的行为称为"方法"。
class Turtle: color ='green' weight =10 legs =4 shell =True month ='大嘴' def climb(self): print("我正在很努力的向前爬...") def run(self): print("我正在飞快的向前跑...") def bite(self): print("咬死你咬死你!!") def eat(self): print("有得吃,真满足^_^") def sleep(self): print("困了,睡觉,晚安,zzz")

二.面向对象编程 1.self:由同一个类可以生成无数对象,当一个对象的方法被调用的时候,对象会将自身的引用作为第一个参数传给该方法。
class Ball: def setName(self,name): self.name = name def kick(self): print("我叫%s,噢~谁·踢我?!"%self.name) a =Ball() a.setName("飞火流星") a.kick() 我叫飞火流星,噢~谁·踢我?!

2.init():
init()方法称为构造方法。
class Potato: def __init__(self,name): self.name=name def kick(self): print("我叫%s,噢~谁·踢我?!"%self.name) p =Potato("土豆“) p.kick() 我叫土豆,噢~谁·踢我?!

3.私有变量
在变量名或函数名前加上"__",这个函数就会成为私有的了。
class Person: __name ="小甲鱼" p = Person() p.name Traceback (most recent call last): File "【#|Python基础——类和对象与魔法方法】", line 1, in p.name AttributeError: 'Person' object has no attribute 'name'

三.继承 1.被继承的类称为基类,父类或超类;继承者称为子类,一个子类可以继承它的父类的任何属性和方法。
class Parent: def hello(self): print("正在调用父类的方法...") class Child(Parent): passp=Parent() p.hello() 正在调用父类的方法... c =Child() c.hello() 正在调用父类的方法...

2.如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法和属性。
3.使用super函数
super函数的"超级"之处在于:不需要明确任何基类的名字,它会自动找出所有基类以及对应的方法。
四.多重继承
class Base1: def foo1(self): print("我是foo1,我在Base1中...")class Base2: def foo2(self): print("我是foo2,我在Base2中...")class C(Base1,Base2): passc =C() c.foo1() 我是foo1,我在Base1中... c.foo2() 我是foo2,我在Base2中...

五.组合
class Turtle: def __init__(self,x): self.num =x class Fish: def __init__(self,x): self.num =x class Pool: def __init__(self,x,y): self.turtle =Turtle(x) self.fish =Fish(y) def print_num(self): print("水池里共有乌龟%d只,小鱼%d条!"%(self.turtle.num,self.fish.num))

六.类,类对象和实例对象
class C: count =0 a =C() b =C() c =C() print(a.count,b.count,c.count) 0 0 0 c.count+=10 print(a.count,b.count,c.count) 0 0 10 C.count+=100 print(a.count,b.count,c.count) 100,100,10

类中定义的属性是静态变量,类的属性是与类对象进行绑定,并不会依赖任何实例对象。如果属性的名字与方法相同时,属性会覆盖方法。
七.绑定 1.__dict__属性由一个字典组成,字典中仅有实列对象的属性,不显示类属性和特殊属性,键表示的是属性名,值表示属性相应的数据值。
dd.setXY(4,5) dd.__dict__ ('x':4,'y':5)

八.一些相关的BIF 1.issubclass(class,classinfo)
如果第一个参数(class)是第二个参数(classinfo)的一个子类,则返回True,否则返回False。
class A: pass class B: pass issubclass(B,A) True issubclass(B,B) True issubclass(B,object) True class C: pass issubclass(B,C) False

2.isinstance(object,classinfo)
如果第一个参数(object)是第二个参数(classinfo)的实列对象,则返回True,否则返回False。
issubclass(B,C) False b1 =B() isinstance(b1,B) True isinstance(b1,C) False

3.hasattr(object,name)
attr是属性的意思,hasattr()函数的作用就是测试一个对象里是否有指定的属性。第一个参数(object)是对象,第二个参数(name)是属性名。
class C: def __init__(self,x=0): self.x=x c1=C() hasattr(c1,'x') True

4.get(object,name[,default])
返回对象指定的属性值,如果指定的属性不存在,则返回default(可选参数)的值; 若没有设置default参数,则抛出异常。
5.setattr(object,name,value)
与getattr()对应,setattr()可以设置对象中指定属性的值,如果指定属性的值不存在,则会新建属性并赋值。
6.delattr(object,name)
与setattr()相反,delattr()用于删除对象中指定的属性,如果属性不存在,则抛出异常。
7.property()
property()的作用是通过属性来设置属性。
class C: def __init__(self,size =10): self.size =size def getSize(self): return self.size def setSize(self,value): self.size =value def delSize(self): del self.size x =property(getSize,setSize,delSize)

魔法方法(1) 一.构造和析构 1.init(self[,…])
class Rectangle: def __init__(self,x,y): self.x=x self.y=y def getPeri(self): return (self.x+self.y) * 2 def getArea(self): return self.x * self.y rect =REctange(3,4) rect.getPeri() 14 rect.getArea() 12

init()方法返回的值一定是None。
2.new(cls[,…])
new()是在一个对象实例化时候调用的第一个方法,它的第一个参数不是self而是这个类(cls),而其他参数会直接传递给__init__()f方法。
class CapStr(str): def __new__(cls,string): string = string.upper() return str.__new__(cls,string) a =CapStr("I Love FishC.com") a 'I LOVE FISHC.COM'

3.del(self)
del()方法是当垃圾回收机制回收这个对象的时候调用的。
二.算术运算 add(self,other) 定义加法的行为:+
sub(self,other) 定义减法的行为:-
mul(self,other) 定义乘法的行为:*
truediv(self,other) 定义真除法的行为:/
floordiv(self,other) 定义整数除法的行为://
mod(self,other) 定义取模算法的行为:%
反运算
radd(self,other) 定义加法的行为:+
rsub(self,other) 定义减法的行为:-
rmul(self,other) 定义乘法的行为:*
rtruediv(self,other) 定义真除法的行为:/
rfloordiv(self,other) 定义整数除法的行为://
rmod(self,other) 定义取模算法的行为:%
class New_int(int): def __add__(self,other): return int(self)-int(other) def __sub__(self,other): return int(self)+int(other) a =New_int(8) b =New_int(9) print(b+a) print(a-b) 1 17class Nint(int): def __radd__(self,other): return int.__rsub__(self,other) a =Nint(5) b =Nint(3) print(a+b) print(1+b) 8 -2class Nint(int): def __rsub__(self,other): return int.__sub__(self,other) a =Nint(5) print(3-a) 2

第一次考核总结 上个周末小组进行了第一次考核,可以说是考的非常不理想,感觉自己也学习了,但还是好多东西都记不住。每次敲那些代码,不是对着书敲,就是上网搜代码,然后自己去敲,其时这样并没有让我记住,反而只是在浪费时间。我平时也不太喜欢看视频,只是看看书上,做做学长发的练习题,通过这次考试我发现,这样做并不能提高我的成绩,接下来的一段时间内,我不仅要把书上的学会,还要抽空的时候去看看有关python基础的视频,跟着他们学习学习。而且对于一些代码,我要去理解它的意思,然后记住它,方便后面的应用。
对于上一阶段的学习我也做了一些总结,首先就是我在小组待的时间并不是很长,最近也因为比较忙经常请假,不去小组学习。在接下来,我一定减少请假的次数,早点去小组学习,晚上可以留在小组多学习一会儿。其次就是,我也要适当改变自己的学习方法,调整自己的学习态度,不能只停留在课本上,要多做一些练习题,每天不仅要学习新的知识也要将以前的知识点复习复习。最后就是,在接下来的时间里,我一定会控制住自己,不让自己在小组学习的时候跑神,玩手机,一定要注意力集中,只有这样,我才能不断的提升自己,成为像学长一样优秀的人。
我相信,在接下来的一段时间内,我一定会更加努力的去学习,提升自己,不再浪费在小组学习的机会,让自己的付出得到令人满意的回报。

    推荐阅读