关于python类的学习(一)

今天学习pytorch的时候,觉得还是要系统的学习一下python的类的部分,不学还是不行,打算花两天的时间将类系统的学清楚,学明白,毕竟万丈高楼平地起,基础不牢地动山摇,好好的打好基础,对于之后的学习肯定是会更加有帮助的,好了闲话不多说,下面我谈谈今天看视频学习的类的知识的一些理解

class MyClass():
    pass
mc=MyClass()
mc.name="孙悟空"
print(mc.name)

先说一句类里面的值是叫做属性,类里面的函数称作方法,一定要区分开,特别是方法和函数,他们是有不同的,这里我后面会详细谈到

好的这个代码运行的结果


孙悟空

这个类里面是没有代码的,但是,我在实例化的对象中添加了属性,就使得它有了值,也就是属性,这个代码的意义就是为了说明类里面的属性,是可以通过实例化的例子对其操作,可以进行属性的添加

#正确的代码
class Person():
    
    def say_hellwo(self):
    
        print("你好")
p1=Person()
p1.say_hellwo()

#错误的代码
class Person():
    
    def say_hellwo():
        
        print("你好")
p1=Person()
p1.say_hellwo()

这里我想说一下关于self这个玩意,这两段代码上面那个会正常运行,但是下面那个会报错,报错的原因是说少传递了一个参数,这个因为类里面会自动的给你传递一个参数,到你的类中定义的函数里面,我们称呼它为方法,为什么要将函数和方法区别开来,也正是这个原因,所以我们要再放过发中写一个参数,那么这个self到底是什么东西,我这里直接说,他就是实例化的例子本身,这句话不好理解,因为我第一次接触的时候一直不理解,今天再次学习才有了更深的理解,但是这个self这里先不谈,本文后面会详细说明

class Person():
    name="孙悟空"
p1=Person()
p1.name="猪八戒"
p2=Person()
print(p1.name,p2.name)

运行结果

猪八戒 孙悟空

这里的代码主要是想说明一下关于类的公共属性和类的属性查询的流程,这里的类里面的代码块的name="孙悟空",这个呢就是公共属性,意味着所有实例化这个类的对象都会有,但是,如果你对实例化的对象进行修改属性,那么公共属性就会被你的修改的属性覆盖,这也引出了查询类的属性的流程,程序去搜索你的属性,首先是对实例化的对象搜索,发现没有,才会搜索类中的公共属性

class Person():
    def __init__(self):
        print("方法执行了")
        print(self)
        pass
p1=Person()
print(p1)

运行的结果

方法执行了
<__main__.Person object at 0x000001C8B008B710>
<__main__.Person object at 0x000001C8B008B710>

这里我先说一下关于__init__方法,这种方法我们称呼它为魔术方法,它不需要你调用它,实例化对象后,它自己会运行,这里运行结果,方法执行了,就是最好的证明,其次我们谈前面说的self,这里我在类代码块里面打印了self,同时在实例化之后打印了实例化的对象,他们输出的地址是一样的这说明他们是一个东西,我个人的理解就是,想象一下,有个人在写一个类的时候,他先写的类然后才是实例化对象,但是,在他写类的时候,实例化的对象还并没有写,但是你又想调用类里面的属性或者方法给类自己用,或者说想把类前面的方法给后面的方法使用,那么,现在并没有实例化对象,这里使用的方法就是通过self

下面我有个代码详细展示并进一步说明这个问题

class Person():
    def __init__(self):
        self.name="孙悟空"

    def say_hellow(self):
        print(f"hellow {self.name}")
p1=Person()
p1.say_hellow()

运行的结果是

hellow 孙悟空

这里我在类代码块中的self.name,实际上就是p1.name,他们都是孙悟空,正是因为,当没有实例化对象时,我们可能要使用之前写好的属性,所以才需要这个self,这个self就是你未来将要实例化的对象,他们是相同的

因此,我们就可以使用self和__init__函数去传递参数了,代码如下

class Person():
    def __init__(self,name):
        self.name=name

    def say_hellow(self):
        print(f"hellow {self.name}")
p1=Person("猪八戒")
p1.say_hellow()

运行的结果

hellow 猪八戒

如果有什么理解不对的地方,欢迎大家指出

你可能感兴趣的:(python关于类的学习,python)