python类方法


类中写方法,稍微了解了一些,明白方法与以前的函数类似。是不是在类中所有的方法就如同函数那样呢? 一起来康康。


方法和函数的异同

相同点

  • 都是使用def关键字
  • 除了特殊方法,都使用return作为结束

不同点

  • 函数是有函数名引用的一个独立对象,通常可以使用函数名调用此对象,不依赖其他
 >>> def func(x):
	return x+5

>>> func
<function func at 0x0000000002DA9598>
>>> type(func)
<class 'function'>
>>> func(5)
10
>>> 
  • 在调用函数的时候,如果函数有参数,必须明确地给每个参数提供对象引用——通俗地不严谨的说,就是每个参数都要传数据。
  • 而方法必须依赖于对象,因为它写在了类中,如果要调用它,就要使用某个对象。
>>> class Xian:
	def my_method(self,x):
		return x*2

	
>>> x = Xian()
>>> x.my_method(3)
6

在类Xian中定义的方法有2个参数 。参数self是类的实例,通过调用方法的时候,不在显式的传入。

>>> Xian.my_method(x,5)
10

如果不用实例调用该方法,必须显式的提供实例参数

>>> x.my_method
<bound method Xian.my_method of <__main__.Xian object at 0x0000000002B36550>>
>>> 

用实例方法调用,x.my_method后面没有“()”,也表示它所引用的对象。这个对象在python中叫做“绑定方法”对象,含义是点前调用的方法帮定在了一个实例上。用类对象调用的方法名称,返回的是

>>> Xian.my_method
<function Xian.my_method at 0x0000000002DA9620>

Xian.my_method 引用的对象看做函数。

类方法

类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量
语法:

class XX:
	@classmethod
	def 方法名(cls):
		pass
  • 类方法需要用 修饰器 @classmethod 来标识,告诉解释器这是一个类方法

  • 类方法的 第一个参数 应该是 cls

    • 由 哪一个类 调用的方法,方法内的 cls 就是 哪一个类的引用

    • 这个参数和 实例方法 的第一个参数是 self 类似

    • 提示 使用其他名称也可以,不过习惯使用 cls

  • 通过 类名. 调用 类方法,调用方法时,不需要传递 cls 参数

  • 在方法内部

    • 可以通过 cls. 访问类的属性

    • 也可以通过 cls. 调用其他的类方法

静态方法

  • 在开发时,如果需要在 类 中封装一个方法,这个方法:
    • 既 不需要 访问 实例属性 或者调用 实例方法
    • 也 不需要 访问 类属性 或者调用 类方法
  • 这个时候,可以把这个方法封装成一个 静态方法

语法:

class XX:
	@staticmethod
	def 静态方法名():
		pass
  • 静态方法 需要用 修饰器 @staticmethod 来标识,告诉解释器这是一个静态方法

  • 通过 类名. 调用 静态方法

为了加深理解,做个实例来看看吧~

要求:创建一个类,当类实例化的时候,自动将数据集中的偶数和奇数分别用两个属性引用

class Oddeven:
    def __init__(self,num):
        self.odds = [i for i in num if self.is_odd(i)]
        self.evens = [i for i in num if i not in self.odds]
    #判断一个数是奇数还是偶数的方法与实力无关,所以可以写成静态方法    
    @staticmethod  
    def is_odd(x):
        if x%2==1:
            return True
        return False

n = [1,5,7,9,2,4,10,5,8]

r= Oddeven(n)
print(r.odds)
print(r.evens)
	

程序结果如下:

[1, 5, 7, 9, 5]
[2, 4, 10, 8]
相关推荐
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页