Python面向对象---self的使用、类变量VS成员变量、成员方法VS类方法VS静态方法

Python类中self、变量、方法及动态添加详解
本文围绕Python类展开,介绍了self的使用,它代表类的实例,定义时需定义,调用时自动传入。还阐述了类变量和成员变量的区别,以及成员方法、类方法、静态方法的特点和适用场景。最后讲解了动态添加属性和方法,包括给实例和类绑定方法。

self的使用:

self代表类的实例[对象],而非类本身
类的方法与普通的函数只有一个特殊的区别—>他们必须有一个额外的第一个参数名称,按照惯例它的名字是self(self不是python的关键字)
 

1.self在定义的时候需要定义,但是在调用的时候会自动传入

2.self的名字并不是规定死的,但是最好还是按照约定使用self

3.self总是指调用时的类的实例

 

类变量和成员变量:

类变量:定义在类中,且在函数体之外,类变量通常不作为实例变量使用,类变量在整实例化的过程中是公用的。

成员变量:定义在方法中且通过self绑定在实例上的变量,只作用于当前实例。

1.当类变量与成员变量同名时,使用对象来调用时,默认调用的是成员变量的值

2.当成员变量不存在,并且类变量存在的时候,在使用对象调用属性的时候,会调用类变量

3.成员变量只能通过对象来调用,而类变量不但可以通过对象调用,还可以通过类名来调用

4.通过对象来更改成员变量或者是类变量的值的时候,只是改变的当前对象的值,而通过类名来更改类变量的值的时候,更改的则是类变量的初始值。

 

成员方法、类方法、静态方法:

成员方法:
一般情况下在类中定义所有的方法我们都称之为成员方法,在成员方法中,它的第一个参数
self,声明的时候必须声明在参数列表中第一个位置,使用对象来进行调用的时候,对象会
将自己作为参数自动传递给self,不需要我们手动传递。
成员方法是给对象准备的,调用的时候必须使用对象来进行调用。

静态方法:

静态方法是一类特殊的方法,有时你可能需要写一个属于这个类的方法,但是这些代码完全不会使用到实例对象本身

类方法:
类方法不是绑定到对象上,而是绑定在类上的方法。
class Test:
    x=1
    @classmethod
    def test(cls):
        print(cls,cls.x)
Test.test()

对比:
成员方法:
当此方法中有使用到self【对象】/成员变量 的时候,必须将此方法写成成员方法。

类方法:
当此方法中没有使用到self/【成员变量】/成员方法,但是它使用到了类变量,
这时候我们必须将此函数写成类方法。

静态方法:
此方法中没有使用到成员变量,也没有使用到类变量,就是一个普通的方法,
这时候我们可以将此函数写成静态方法。
 

动态添加属性和方法:
#定义一个空类
class Person():
    pass
# 动态添加属性[体现了动态语言的特点:灵活性]
per = Person()
per.name = "tom"
print(per.name)

#动态添加方法
def say(self):
    print("my name is "+ self.name)
per.speak = say
per.speak(per)

但是,给一个实例绑定的方法对另外一个实例是不起作用的。

为了给所有的实例都绑定方法,可以通过给class绑定方法
def say(self,name):
    self.name = name
    print("my name is "+ self.name)
Person.speak = say

per = Person()
per.say()

给class绑定方法后,所有的实例均可调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值