python中类与对象的小理解
定义class Car:(这其中Car就是类哦)pass(暂时跨过)c1Car()(其中Car()是创建对象,这是对象就已经存在了,那我们可能会有疑问,为什么要专门有一个变量去存已经存在的对象呢?原来创建对象后我们还要一个贴在对象上的标签,一个写着对象地址的标签有点像指针)c1.colorred这则是动态的为对象增加上一个个属性print(c1)这时候就有问题,结果是main.Car object at 0x000001D0A7D56900,不慌,来读读,car指的是变量是car这个类型,object则是对象实例,后面是一个地址.其实就是直接给变量开盒了如何解决呢,print(c1._ dict)就是把属性以字典的形式输出,获取里面的值c1.color但是以上的动态添加没有体现类作为模板的作用,还有更好的方法class 类名: def __init__(self, c_brand, c_name, c_price):(在类里面这样的函数定义法叫方法,外面叫函数;同时这也是初始化参数规定有哪些属性) self.brand c_brand # 给车加“品牌”属性 self.name c_name # 给车加“车型名”属性 (c_name实际上像船锚一样把属性固定为长期可用) self.price c_price # 给车加“价格”属性 c1 Car(BMW, X5, 500000) # 调用Car类传入参数得到具体的对象x5(还是有前面提到的车牌的那种)self的理解self只是类方法内部的一个占位符,表示你创建的任意一个对象,c1是外部的别称,两者地址完全一致正因为他指向的不确定从而使类更加灵活,就像self.brand中的self指的永远是使你即时创建的任意一个对象,例如c1,c2如果不写self.brand c_brand而是Car.brand c_brand,那你的类就成了一次性用品,赋值时会覆盖掉上一次的数据方法以及魔法方法正常在类中定义函数即可,但是形参需要是self就像上文提到的他可以使方法复用调用还是创建后c1.function()即可,返回值的话就整个变量接一下魔法方法无需调用,他可以使比较更加灵活多变class Car: def __ init __ (self, brand, name, price): self.brand brand self.name name self.price price def running(self): print(f{self.brand} {self.name}正在高速行驶 .. ) def __ str __ (self): return f{self.brand} {self.name} {self.price} def __ eq __ (self, other): return self.price other.price and self.brand other.brand and self.name other.name def __ lt __ (self, other): return self.price other.price c1 Car(BMW, X5, 500000) print(c1) c2 Car(BMW, X5, 500000) print(c2) print(c1 c2) print(c1c2)就像上文,如果直接比较c1 c2就是内存地址之间的比较,但是有了str等等就可以比较自己想比较的东西,上面c1,c2笔者就是想比较属性而不是地址,从而用魔法方法改变了关系运算符的判断对象以及print的输出对象(其实就像把lt当成一个在打印时前置的附着函数,把实参c1,c2传入后得到结果再直接打印)类属性与实例属性实例属性还是基于self的个体化属性,而类属性则是类中共通的属性(就像全局变量一样),直接在class Car:的下面定义即可,调用直接c1.wheel或Car.wheel,如果类属性与实例属性都定义了同一个属性,那么先输出的是实例属性class Car: wheel 4 # 轮胎数量 tax_rate0.1# 购置税比较在了解类与对象后,不禁联想到了c中的结构体两者同为一种数据容器,都是为了把同一类数据的多个属性打包在一起,避免重复性劳动但是python中的类更为强大,既有数据又有方法可以动态变化,c语言则是单纯静止的数据(没有self喽)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416356.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!