0
点赞
收藏
分享

微信扫一扫

简单 Python 快乐之旅之:Python 基础语法之面向对象专题

文章目录

  • ​​1. Python 里类的定义​​
  • ​​1.1. Python 常见的方法类型​​
  • ​​1.1.1. 实例方法​​
  • ​​1.1.2. 静态方法​​
  • ​​1.1.3. 类方法​​
  • ​​1.2. Python 常见的属性类型​​
  • ​​1.2.1. 实例属性​​
  • ​​1.2.2. 类属性​​
  • ​​1.3. 类定义的示例​​
  • ​​2. 实例对象的创建​​
  • ​​3. 访问类的属性和方法​​
  • ​​4. \_\_init__() 函数​​
  • ​​参考资料​​


Python 是一门面向对象编程语言,Python 里一切皆对象。每个对象都有自己的属性和方法。


在 Python 里使用 class 关键字来定义类:

class ClassName:
# class body

类体部分可以包含对属性和方法的定义。

1. Python 里类的定义

在进行 Python 的类的定义之前,我们先来熟悉一下 Python 里常见的方法类型以及属性类型。

1.1. Python 常见的方法类型

Python 里常见的方法类型有三种:实例方法、静态方法和类方法。

1.1.1. 实例方法

实例方法就是类的实例使用的方法,其第一个参数必须是实例对象,该参数名一般约定为 self,通过它来传递实例的属性和方法,还能传递类的属性和方法。
实例方法只能由实例对象进行调用。

1.1.2. 静态方法

静态方法不需要实例或类对象作为参数,方法体中也不能使用类或实例的任何属性和方法,静态方法在定义时必须用装饰器 @staticmethod 注明。
实例对象和类对象都可以调用静态方法。

1.1.3. 类方法

类方法就是类对象使用的方法,其第一个参数必须是当前类对象,该参数名一般约定为 cls,通过它可以来传递类的属性和方法,但不能够传递实例的属性和方法。

1.2. Python 常见的属性类型

Python 里常见的属性类型有两种:实例属性和类属性 (又称静态变量)。

1.2.1. 实例属性

类实例化以后对实例定义的属性。注意,如果该属性已在类体重定义,即实例属性和类属性重名,那么实例属性将覆盖类属性。

1.2.2. 类属性

Python 中,在类体中定义的属性成为类属性,又称静态变量。Python 是动态语言,不存在完全静态的变量。
为了弄清楚实例属性和类属性的区别,我们看以下示例:

# Example – Define Class in Python
class Laptop:
name = 'My Laptop'
processor = 'Intel Core'

laptop = Laptop()
print('laptop.name:', laptop.name) # exactly class property: Laptop.name
laptop.weight = 2 # defined a new instance property weight
print('laptop.weight:', laptop.weight)
laptop.name = 'Whose Laptop' # defined a new instance property name, override class property Laptop.name
print('laptop.name:', laptop.name)
del laptop.name # instance property name destroyed
print('laptop.name:', laptop.name) # class property Laptop.name restored

执行和输出:

简单 Python 快乐之旅之:Python 基础语法之面向对象专题_静态方法


由此可见,​​​laptop.name​​ 首先指向的是该实例的实例属性,如果没有 name 这个实例属性,表示的是类属性。

所以在定义实例属性的时候千万别和类属性重名,否则会很容易弄混。

1.3. 类定义的示例

弄清楚上述概念以后,我们来进行一个类的定义:

# Example – Define Class in Python
class Laptop:
name = 'My Laptop'
processor = 'Intel Core'

@staticmethod
def start():
print('Laptop is starting...')

@staticmethod
def restart():
print('Laptop is restarting...')

@classmethod
def clsdetails(cls):
print('My Laptop name is:', cls.name)

def selfdetails(self):
print('My Laptop name is:', self.name)
print('It has', self.processor, 'processor.')

上述示例中,我们定义了两个类属性:nameprocessor;两个静态方法:startrestart;一个类方法:clsdetails;一个实例方法:selfdetails

2. 实例对象的创建

​​pythonexamples​​ 对此给出示例如下:

简单 Python 快乐之旅之:Python 基础语法之面向对象专题_python_02


这是不被建议的。原因如上文所述。

我们重新给出示例:

# Example – Define Class in Python
class Laptop:
name = 'My Laptop'
processor = 'Intel Core'

@staticmethod
def start():
print('Laptop is starting...')

@staticmethod
def restart():
print('Laptop is restarting...')

@classmethod
def clsdetails(cls):
print('My Laptop name is:', cls.name)

def selfdetails(self):
print('My Laptop name is:', self.name)
print('It has', self.processor, 'processor.')
print(self.question)
print(self.answer)

# create object
laptop1 = Laptop()
laptop1.question = 'Any question?'
laptop1.answer = 'No question.'
laptop1.selfdetails()

执行和输出:

简单 Python 快乐之旅之:Python 基础语法之面向对象专题_python_03

3. 访问类的属性和方法

从上面的例子中可以看出,可以使用点操作符来访问类的属性和方法。

object.property
object.method([arguments])

也可以使用赋值操作符,即等号,来给这些属性分配特定的值。

object.property = someval() 函数

在 Python 语言中,有一个内建函数 __init__(),每当对象被创建时它会就会被调用。__init__() 函数用于初始化对象的状态。也就是说,这是一个我们可以对我们的对象的创始或基本状态进行设定的地方。
我们还可以向 __init__() 函数传递一些参数,以便在创建每个对象时,可以将其创建为唯一的。
如果我们在定义类的时候没有定义 __init__() 函数,那么在创建对象时会有对内建 __init__() 函数的一个隐式调用。
在接下来的例子里,我们定义了一个具有 __init__() 函数的类,在该函数中我们将初始化对象的一些属性:

# __init__() Function Example
class Laptop:
def __init__(self, name, processor, hdd, ram, cost):
self.name = name
self.processor = processor
self.hdd = hdd
self.ram = ram
self.cost = cost

def details(self):
print('The details of the laptop are:')
print('Name :', self.name)
print('Processor :', self.processor)
print('HDD Capacity :', self.hdd)
print('RAM :', self.ram)
print('Cost($) :', self.cost)

# create object
laptop1 = Laptop('Dell Alienware', 'Intel Core i7', 512, 8, 2500.00)

print(laptop1.name)
laptop1.name = 'some'
print(laptop1.name)
del laptop1.name
print(laptop1.name)
# print(laptop1.processor)

# laptop1.details()

执行和输出:

简单 Python 快乐之旅之:Python 基础语法之面向对象专题_静态方法_04


可以看到使用 __init__() 函数我们做了很多事情。对此我们总结如下:

  • __init__() 函数使用传递给它的参数初始化对象属性。
  • 对象属性的声明在 __init__() 函数中就完成了。
  • 这些定义的属性可以在该类的其他方法中访问 (​​self.name​​​),也可以通过对象引用访问 (​​laptop1.name​​)。

参考资料

  • ​​Python Class – Create Object – Example​​
  • ​​Python __init__() function​​



举报

相关推荐

0 条评论