鱼C论坛

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

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

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

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

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

x
Screenshot_2018-06-11-17-40-36-335_com.miui.video.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

#下面代码省略#

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

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

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

#下面代码省略#

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

顺便解释一下什么是实例化类对象
a = P() #这就是实例化一个类对象
a #a就是一个P类的实例化对象,你可以对它进行实际操作

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

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

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

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

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

如果有帮助请设置为最佳答案,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

#下面代码省略#


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

什么是实例化对象呢?
p = P() #实例化P类 , p 就是一个实例化对象

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

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

#下面代码省略#


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

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

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

如果有帮助,请设置i最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

我们来简化一下代码!
[code]class P:
        def __init__(self,fget): #这个是__init__内置函数
                self.fget = fget  

#下面代码省略#
[/code]

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

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

什么是实例化一个类对象?
p = P(fget = "我是实例化对象") #p就是 P类的实例化对象

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-12 14:30:15 From FishC Mobile | 显示全部楼层
这些参数是不是传给了c的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-24 04:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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