Pytorch学习——TORCH.AUTOGRAD

1. Pytorch中backward()函数

backward(gradient=None, retain_variables=False)[source]

2.Python中的类

(1)属性+方法=类

属性:静态特征
方法:动态特征
在python约定首字母大写为“类”,小写为函数

(2)面向对象的特征

  • 封装
  • 继承
class Mylist(list):
    pass
list2=Mylist()
list2.append(5)
list2.append(8)
list2.append(8)
list2
[5, 8, 8]
list2.sort()
list
<class 'list'>
list2
[5, 8, 8]

-多态

class A:
    def fun(self):
        print("AA")
        
class B:
    def fun(self):
        print("BB")
        
a=A()
b=B()

a.fun()
AA
b.fun()
BB

(3) init(self)

init(self)只要实例化一个对象的时候,这个方法就会被调用

class ball:
    def __init__(self,name):
        self.name=name
    def kick(self):
        print("我是%s,"%self.name)
b=ball('haha')
b.kick()
我是haha,

(4)super()

super()函数是用于调用父类(超类)的一个方法;

super()是解决多重继承类问题,直接用名调用父类方法在使用单继承的时候没有问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等常见问题。

当子类中出现与父类相同名的方法,子类中的方法就会覆盖父类中的方法,但是如果也想用父类的方法时候,可以使用super()函数

class Fish:
    def __init__(self):
        self.x=random.randint(0,10)
        self.y=random.randint(0,10)

    def move(self):
        self.x-=1
        print("我的位置是: ",self.x,self.y)

class Goldfish(Fish):
    pass

class Carp(Fish):
    pass

class Salmon(Fish):
    pass

class Shark(Fish):
    def __init__(self):
        # Fish.__init__(self)
        # super().__init__()
        self.hungry=True

    def eat(self):
        if self.hungry:
            print("吃货,天天吃")
            self.hungry=False
        else:
            print("吃饱了")
selmon=Salmon()
selmon.move()
shark=Shark()
shark.move()
shark.eat()


运行结果:
在这里插入图片描述
出错的原因是Shark()子类中的__init__(self)覆盖了父类的__init__(self),所以shark.move的时候就会出现没有"x",所以可以使用super()函数,调用父类。代码改动结果如下:

class Shark(Fish):
    def __init__(self):
        # Fish.__init__(self)
        super().__init__()
        self.hungry=True

    def eat(self):
        if self.hungry:
            print("吃货,天天吃")
            self.hungry=False
        else:
            print("吃饱了")


fish=Fish()
fish.move()
goldfish=Goldfish()
goldfish.move()
carp=Carp()
carp.move()
selmon=Salmon()
selmon.move()
shark=Shark()
shark.move()
shark.eat()

运行结果:
在这里插入图片描述

(5)多重继承

一个子类可以继承多个父类

class Base1:
    def foo1(self):
        print("我是foo1,为Base1代言,")
        
class Base2:
    def foo2(self):
        print("我是foo2,为Base2代言")
        
class C(Base1,Base2):
    pass

运行结果:

c=C()
c.foo1()
我是foo1,为Base1代言,
c.foo2()
我是foo2,为Base2代言

(6)组合

当几个类之间没有关系的时候,但是需要将它们放到一块,用继承就会显得很突兀,所以需要另外一种方法。比如一个池塘里里有x只乌龟,y条鱼。

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))

pool=Pool(1,10)
pool.print_num()

运行结果:
在这里插入图片描述
也可以这样简写:

class Pool:
    def __init__(self,x,y):
        self.turtle=x
        self.fish=y

    def print_num(self):
        print("水池里有%d只乌龟,%d条鱼"%( self.turtle,self.fish))

pool=Pool(1,10)
pool.print_num()

(7)绑定

Python严格要求方法需要实例才能被调用,这种限定其实就是Python所谓的绑定。

class CC:
    def setXY(self,x,y):
        self.x=x
        self.y=y
    def print(self):
        print(self.x,self.y)
        

在这里插入图片描述
从运行结果可以看出当类CC被删除的时候,但是dd.print()还可以运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值