python基础语法 010 类和对象-3 方法

 

 1.3 方法

属性表示是一个类当中的成员或类的特征,而方法是??

方法:表示类、对象的行为,方法本质上是函数,是一个特殊的函数

  • 属性名称一般为名词,
  • 方法名称一般为动词

1.3.1 方法 VS 属性

  • 1、self
  • 2、放在类里面,存在缩进的,否则就是普通函数了
  • 3、调用过程不一样,方法需要加前缀,类名或者对象名 而函数前面要么不加,要么加的是模块名称

1.3.2 实例方法、对象方法的特征:

1)定义
  • 1、实例方法直接定义在类中
  • 2、第一个参数名称,必须规定是self
  • 3、实例方法在调用的时候,前缀是对象,不能是类,
2) 实例方法的访问:

        只有该类的实例对象都可以访问,访问实例方法的时候会自动将对象本身当成承诺书,传给self接收 


class Man:
    #定义类属性
    gender = '男'
    power = '强'
    handsome = 'very'

    def drink(self):
        "喝"
        pass
    def play_game(self):
        "玩游戏"
        pass
  

#对象.方法()
Man().drink()

xiaoyi = Man()
xiaoyi.drink()

#类.方法()
# Man.drink() #不可
"""报错,行为是属于某一个人的,不能被类调用
TypeError: drink() missing 1 required positional argument: 'self'
"""

1.3.3 类方法:本质上还是一个函数

1)定义:
  • 1、在方法的上面添加装饰器:@classmethod
  • 2、把实例方法当中的self改为cls代表class的缩写,第一个参数必须是当前类的对象,该参数名一般定义为’cls‘, 通过它来传递类的属性和方法(不能传实例的属性和方法)
2)调用:

        实例对象和类对象都可以使用
 

class Man:
    #定义类属性
    gender = '男'
    power = '强'
    handsome = 'very'

 
    #装饰器,代表封装这个函数的功能,用了就是类方法
    @classmethod
    def eat(cls):
        print("正在吃")


#类.方法()
#打印函数的调用打印出来的是函数的返回值
print(Man.eat())

print(Man().eat())
"""
正在吃
None 
正在吃
None  ===>因为打印的是返回值,没有return打印为None
"""
3)应用场景:

        需要站在类的角度执行某个行为时,就应该定义为类方法

1.3.4 静态方法

1)定义:

        使用装饰器@staticmethod,参数随意,没有’self‘和’cls‘参数,但是方法体中不能使用类或实例的任何属性和方法


class Man:
    @staticmethod
    def tianqi(self):
        print("天气不错")
#静态方法使用
Man.tianqi()
"""静态方法不需要用self
TypeError: tianqi() missing 1 required positional argument: 'self'
"""
2)调用:

        实例对象和类对象都可以调用

3)应用场景:

        存放逻辑代码,内部不需要引用类属性和实例属性

4)是什么?

        是刚刚好放在一个类当中的普通函数而已,除了放在类当中和普通函数没什么区别

        指:把其放到类外面,和普通函数无区别只是没有装饰器@staticmethod,

class Man:
   
    @staticmethod
    def tianqi():
        print("天气不错")

        和下列普通函数无差别

def tianqi(self): 
    print("天气不错")

        没有实际作用,和类或者对象没有关系(联系)

5) 为什么要用静态方法,为什么要把普通函数放到类当中去?

         ANS:方便管理,把普通函数放在指定的类中,这样查找该函数就可以在指定类寻找,整个代码管理不至于太混乱 和类方法无关系,只是放在类里面

6)调用静态方法

         静态方法(普通函数):只需要在调用静态方法,前面加上类名或者对象名

        而 类外面的普通函数:普通函数不需要加类、对象名,不是模块调用,也不用加模块

class Man:
    #定义类属性
    gender = '男'
    power = '强'
    handsome = 'very'

    @staticmethod
    def tianqi():
        print("天气不错")



#调用静态方法
Man.tianqi()
Man().tianqi()

实际使用过程当中:

  • 实例方法:占98%,实例方法占大多数情况
  • 类方法、静态方法:工作一般用不到

                >在实际情况中,不知道用什么方法,就用实例方法

                >类方法:后续会有特殊情况介绍

                >静态方法:使用静态方法要么可以写为实例方法,要么定义一个普通函数,可使用普通函数代替,不是必须的(方便管理)

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值