Python的类的方法的区别

1. 类的实例方法

  实例方法的调用有两种形式,但都是先将类实例化。方法1是最常见的,先定义一个dog实例,再通过dog实例调用animal类中的实例方法。方法2原理同方法1,talk方法中的self形参传递的其实就是实例本身,既也相当于定义了一个dog实例


class Person(object):
def __init__(self):
pass
def talk(self):
print("in animal talk")
doctor=Person()
doctor.talk() #方法1
Person.talk(doctor) #方法2

2. 类的静态方法
  静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。
可以理解为将静态方法存在此类的名称空间中。
事实上,在python引入静态方法之前,通常是在全局名称空间中创建函数。
class Person(object):
def __init__(self):
pass

@staticmethod
def talk():
print("person talk")


doctor = Person()
doctor.talk() # 通过实例可调用
Person.talk() # 通过类名也可以直接调用

3. 类方法
  类方法是将类本身作为对象进行操作的方法。他和静态方法的区别在于:不管这个方式是从实例调用还是从类调用,它都用第一个参数把类传递过来。

class A(object):
def __init__(self,str):
print(str)
@classmethod
def link_str(cls,*args):
"""
将string字符串组合
:param args:strs
:return:str
"""
temp_tuple = args
result = ""
for i in range(len(temp_tuple)):
result = result + temp_tuple[i]
return cls(result)

obj_1=A("aa")
obj_2=A.link_str("aa","bb","cc") #相当于obj_2=A(link_str())

 

4. 类私有方法

如果在一个方法前面加上了”_”那么这个方法就变为了这个类私有方法,在运行结果中找不到__private这个方法,只找到了_A__private,python其实这个方法名上加上了”类名”,所有当我们之间调用时会出现找不到该属性的错误。私有方法一般只在类内部进行调用。如果想要在类外强制调用那么可以通过调用_A__private这个方法来调用(一般不建议强制调用)
保护方法:
保护方法很好理解就是以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *。很好的体现面向对象编程的封装,继承两大特性。

python中类中的方法其实也是类属性的一种(动态属性),区别于类的静态属性的是方法可以有行参输入。
————————————————
版权声明:本文为CSDN博主「Pitbull22」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/niyifan2/article/details/81908731





posted on 2021-12-17 17:31  ClareBaby01  阅读(526)  评论(0编辑  收藏  举报