003---属性查找和绑定方法

Posted xjmlove

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了003---属性查找和绑定方法相关的知识,希望对你有一定的参考价值。

属性查找与绑定方法

属性查找

类有两种属性:数据属性和函数属性

class LuffyStudent:
    school = 'Luffy'

    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age

    def learn(self, class_name):
        print('%s 正在学习 %s' % (self.name, class_name))

    def eat(self):
        print('吃东西')

    def sleep(self):
        print('睡觉')

s1 = LuffyStudent('王青', '女', 18)
s2 = LuffyStudent('江子牙', '男', 21)
  • 类的数据属性是共享的,在内存中只存在一份。
# 类中的数据属性是类属性,是所有对象共有的,在内存中只有一份
print(LuffyStudent.school,id(LuffyStudent.school))  # Luffy 2243589824616
print(s1.school,id(s1.school))                      # Luffy 2243589824616
print(s2.school,id(s2.school))                      # Luffy 2243589824616
  • 类的函数属性是绑定给对象用的,绑定到对象的内存地址都不一样。
# 类中的函数属性:是绑定给对象,绑定到不同对象
print(LuffyStudent,)
print(s1.learn)       # bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001CC059EED30
print(s2.learn)       # bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001CC059EED68

绑定方法

定义类并实例化三个对象

    class LuffyStudent:
        school = 'Luffy'
    
        def __init__(self, name, sex, age):
            self.name = name
            self.sex = sex
            self.age = age
    
        def learn(self, class_name):
            print('%s 正在学习 %s' % (self.name, class_name))
    
        def eat(self):
            print('吃东西')
    
        def sleep(self):
            print('睡觉')
    
    
    s1 = LuffyStudent('王青', '女', 18)
    s2 = LuffyStudent('江子牙', '男', 21)
    s3 = LuffyStudent('江薏米', '女', 0)
  • 类中定义的方法(没有加任何装饰器的),类可以使用,但必须遵循函数的参数规则,有个参数self
# 类调用函数
LuffyStudent.learn(s1,'Java')  # 王  青 正在学习 Java
LuffyStudent.learn(s2,'Linux') # 江子牙 正在学习 Linux
  • 其实这种方法并不是给类使用的,而是给对象用的,而且是绑定到对象的。虽然所有对象都指定一样的方法,但是绑定到不同对象就是不同的绑定方法。
  • 特殊之处就是,绑定给谁,谁就来调用。就会将它自己作为第一个参数传给绑定方法,即自动传值(init()也是一样)
# 对象调用函数:自动把对象传给self
s3.learn('C++')              # 江薏米 正在学习 C++
s1.learn('Go')               # 王  青 正在学习 Go
  • 注意:这种自动传值的特征,决定了类中定义的函数都要默认写一个参数self,不是固定名字,至少约定成俗的写出self。就像是一种规范

以上是关于003---属性查找和绑定方法的主要内容,如果未能解决你的问题,请参考以下文章

003-代码补全,运行,调试

如何将 View 类中的代码片段移动到 OnAppearing() 方法?

属性查找;绑定到对象的方法的特殊之处;对象之间的交互

python-属性的查找与绑定方法

有没有更聪明的方法将布局绑定到片段?

属性查找与绑定方法