Python 面向对象-方法

Python 面向对象,类方法、静态方法、实例方法和属性方法学习与总结。

类方法

  类方法是类对象的方法,在定义时需要在上方使用 @classmethod 进行装饰,形参为 cls。表示类对象,类对象和实例对象都可调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Person:
def __init__(self, name, age, phone):
self.name = name
self.age = age
self._phone = phone
@classmethod
def say(cls): # 传递参数为cls
print("Hello......")
p = Person("fzy", 24, "13111112222")
p.say() # 类的实例对象调用
Person.say() # 类对象调用

  输出结果:

1
2
Hello......
Hello......

静态方法

  静态方法是一个任意函数,在其上方使用 @staticmethod 进行装饰,可以用对象直接调用,静态方法实际上跟该类没有太大关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Person:
def __init__(self, name, age, phone):
self.name = name
self.age = age
self._phone = phone
@staticmethod
def say(): # 无需传递参数
print("Hello......")
p = Person("fzy", 24, "13111112222")
p.say() # 类的实例对象调用
Person.say() # 类对象调用

  输出结果:

1
2
Hello......
Hello......

  在 Python 3 中,如果方法只通过类调用,而不需要通过实例调用的话,不用非要声明为静态的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Person:
def __init__(self, name, age, phone):
self.name = name
self.age = age
self._phone = phone
@staticmethod
def say(): # 无需传递参数
print("Hello......")
p = Person("fzy", 24, "13111112222")
p.say() # 类的实例对象调用
Person.say() # 类对象调用

实例方法

  类实例方法是类实例化对象的方法,只有实例对象可以调用,形参为 self,指代对象本身。

1
2
3
4
5
6
7
8
9
10
11
class Person:
def __init__(self, name, age, phone):
self.name = name
self.age = age
def say(self): # 传递参数self
print("My name is ", self.name)
p = Person("fzy", 24, "13111112222")
p.say() # 类的实例对象调用

  输出结果:

1
My name is fzy

属性方法

  通常,在面向对象的编程语言里,会为私有属性设置 gettersetter 方法来实现对私有属性的获取和设置功能。如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
def get_name(self):
return self._name
def set_name(self, value):
self._name = value
def get_age(self):
return self._age
def set_age(self, value):
self._age = value
p = Person("fzy", 24)
print(p.get_name(), p.get_age())
p.set_name("cj")
p.set_age(23)
print(p.get_name(), p.get_age())

  输出结果:

1
2
fzy 24
cj 23

  属性方法的作用就是通过 @property 把一个方法变成一个静态属性。使用 property 取代 gettersetter 方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
@property
def age(self):
return self._age
@age.setter
def age(self, value):
self._age = value
p = Person("fzy", 24)
print(p.name, p.age)
p.name = "cj"
p.age = 23
print(p.name, p.age)

  输出结果:

1
2
fzy 24
cj 23
坚持原创技术分享,您的支持将鼓励我继续创作!