最近在学习小甲鱼的Python课程,学到了对魔法方法覆写(重写?重载?)这一块,先不bb,贴代码
class Cel:
def __init__(self,value = 20.0):
self.value = float(value)
def __get__(self,instance,owner):
return self.value
def __set__(self,instance,value):
self.value = float(value)
class fah:
def __get__(self,instance,owner):
return instance.celt * 1.8+32
def __set__(self,instance,value):
instance.celt = (float(value) -32)/1.8
class Tempture:
celt = Cel()
faht = fah()
这是一个摄氏度华氏度转换的实验。
运行代码如下
黑人问号??为什么faht是NoneType,代码中的类编写时不已经对他实例化了吗?而且编写完成类就会成为类对象,可以通过类对象可以访问类属性…好…扯远了…
经过一番寻找之后,终于发现问题!我没有实例化调用组合方法的类的对象!
即要先这样写: test = Tempture(),得先实例化一个对象出来
问题还没解决为什么类对象不能访问使用方法呢?!
很简单,面向对象编程的思想的一点,就是通过** 类 **将要实例化的对象抽象出来。
举个栗子,动物是一种类吧,是从鸡鸭鹅这些对象抽象出来的吧。
再说类的方法,就是类的行为,从程序的角度也可以说是一个函数,类中定义的方法,也是抽象的。
再举个例子,比如说动作,鸟飞鱼游乌龟爬,所以类中定义的方法是不具体的。方法的实现是针对每个不同的对象而言的,想通过类对象来使用方法,是不具体的,不能表达要做什么。
所以说之前没有先实例化对象,可能是一时疏忽,背后也可能是更可怕的没有掌握面向对象编程思想的精髓。
再说说复习复习魔法方法8 ^ v ^
Python中的魔法方法可以使用(修改)实例化这个“魔法方法的类”的”对象“的属性:
Class 这是一个魔法方法的类:
》》Def __重写的方法__(self,instance,owner):
Self : 类对象
Instance: 因为魔法方法在组合(即一个类中实例化另一个类,他们属性不太相关时用组合方法,不使用继承,这也是一种拓展类的方法)中使用,这个关键词存放的是使用这个组合方法的类的对象
Owner: 使用组合方法的类
今天收获不错呢 哈哈哈 谦虚谦虚
补充一下
类对象就是可以用类名字直接使用表示的对象,它支持两种操作,直接属性使用和实例化。对于类属性的使用,直接使用类名.属性即可。对于类方法的使用,需要实例化一个对象后,将对象名赋值给self使用