鱼C论坛

 找回密码
 立即注册
查看: 1087|回复: 6

property实现原理中self.fget为什么可以传参数啊

[复制链接]
发表于 2018-6-11 17:43:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Screenshot_2018-06-11-17-40-36-335_com.miui.video.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-6-11 18:45:50 | 显示全部楼层
本帖最后由 幽梦三影 于 2018-6-11 18:49 编辑

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-6-12 00:05:30 | 显示全部楼层
哈喽,
首先我们看到这一句代码
  1. class P:
  2.         def __init__(self,fget): #这个是__init__内置函数
  3.                 self.fget = fget  

  4. #下面代码省略#
复制代码


__init__(self) 内置函数,是一个初始化函数。

当你执行 object = P() 语句时,就是将一个类实例化成一个类对象。
就像你创建了一个小天使,当这个小天使出生的时候,他就会自动执行__init__ 这个函数。

而当我们给 __init__(self) 这个函数添加一个参数时 (形式参数),如下面代码:
  1. __init__(self, fget):      #我们就实际上是给这个类一个可输入的参数

  2. object = P(fget = "我是小天使")  #当我们实例化他的时候,就可以给他传入一个参数
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 00:13:38 | 显示全部楼层
让我们来简化以下代码
  1. class P:
  2.         def __init__(self, fget): #这个是__init__内置函数
  3.                 self.fget = fget  

  4. #下面代码省略#
复制代码


__init__(self) 这个方法是一个内置的初始化方法,当我们实例化一个类对象的时候
它就会被自动调用,不知道这个你学到了没有。

顺便解释一下什么是实例化类对象

  1. a = P() #这就是实例化一个类对象
  2. a #a就是一个P类的实例化对象,你可以对它进行实际操作
复制代码


你可以在__init__方法中,添加任意的代码,它都会在类对象被创建的时候自动执行。

当然,你是可以设置一些传入参数的,所以就有了以下这些代码
  1. class P:
  2.         def __init__(self, fget): #这个是__init__内置函数
  3.                 self.fget = fget  

  4. p = P(fget = "我是p的实例化对象")
  5. #下面代码省略#
复制代码


那你就会很困惑 self.fget 和 fget 是什么区别?

self.fget 其实是一个储存在 p 这个实例化对象中的一个属性,你可以理解为储存的一个变量。
而fget 是我们传入的参数。

如果有帮助请设置为最佳答案,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 00:23:12 | 显示全部楼层

强烈要求添加编辑栏的自动保存功能!

首先我们来简化代码!
  1. class P:
  2.         def __init__(self,fget): #这个是__init__内置函数
  3.                 self.fget = fget  

  4. #下面代码省略#
复制代码


我们可以看到 __init__(self, fget) 这个内置方法有两个参数,首先来介绍一下__init__(self) 内置方法。
它是一个初始化方法,就是当你对一个类进行实例化成一个类对象时自动执行的。

什么是实例化对象呢?

  1. p = P() #实例化P类 , p 就是一个实例化对象
复制代码


而当实例化时,就会自动执行__init__ 方法,所以你可以添加任何的代码,当然也包括你想要传入的参数。

我们再来看看这个代码:
  1. class P:
  2.         def __init__(self,fget): #这个是__init__内置函数
  3.                 self.fget = fget  

  4. #下面代码省略#
复制代码


你是否会疑惑, self.fget 和 fget 有什么区别?

self.fget 其实是一个类属性, 就如同一个存储在这个类中的一个变量。

而fget 是一个形参, 是我们初始化的时候传入的参数。

如果有帮助,请设置i最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 00:28:33 | 显示全部楼层

强烈要求添加编辑栏的自动保存功能!

我们来简化一下代码!

  1. [code]class P:
  2.         def __init__(self,fget): #这个是__init__内置函数
  3.                 self.fget = fget  

  4. #下面代码省略#
复制代码
[/code]

我们可以看到 __init__(self , fget) 这个内置方法有两个参数, 一个是self (自身) ,一个是 fget 。

__init__ 是一个内置的初始化函数,当我们在初始化P类的 实例化对象的时候就会自动执行。

什么是实例化一个类对象?

  1. p = P(fget = "我是实例化对象") #p就是 P类的实例化对象
复制代码


所以虽然我们设置的参数是在__init__ 这个内置方法中,但是其实我们在实例化一个类对象的时候,就是传入这个P() 的括号里!

如果有疑问,请回复,如果有帮助,请设置为最佳答案!

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-12 14:30:15 From FishC Mobile | 显示全部楼层
这些参数是不是传给了c的方法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 19:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表