在面向对象编程中,“实例化”是指根据一个类创建具体对象的过程。这个过程涉及几个步骤:
-
定义类:首先,你需要定义一个类,这个类是一个蓝图,描述了一组具有相同特征(属性)和行为(方法)的对象。
-
创建实例:当你根据这个类创建一个具体的对象时,这个对象就称为该类的一个“实例”。创建实例的过程就叫做“实例化”。
class实例化后才能使用
为了使用类中的方法或访问其属性,你需要先创建一个类的实例(也称为对象)
my_object = MyClass(args)
举例
class MyClass:
def __init__(self, x):
self.x = x # `self` 用于引用实例的属性
def display(self):
print(f"x = {self.x}") # `self` 用于访问实例的属性
def increment(self):
self.x += 1 # `self` 用于修改实例的属性
mymy = MyClass(10)
mymy.display()
mymy.increment()
mymy.display()
既然mymy已经是一个实例,为什么经过mymy = MyClass(10)后不会直接输出,不会直接增加,还需要再调用呢?
当你创建一个类的实例时,构造函数(在 Python 中是 __init__
方法)会被调用,但它只是初始化对象的状态,不会执行其他方法。要执行其他行为,你需要显式地调用类中定义的方法。
定义一个函数
def last_word_length(s):
if not s:
return 0
else:
words = s.split()
length = len(words[-1])
return length
s = "hello nowcoder"
print(last_word_length(s))
错误定义一个类
class last_word_length(s): # 这里语法错误
if not s:
return 0
else:
words = s.split()
length = len(words[-1])
return length
s = "hello nowcoder"
print(last_word_length(s))
错误原因:
在这个例子中,试图定义一个名为 last_word_length
的类,但是类定义的语法是错误的。在Python中,类定义应该包含方法,通常至少有一个 __init__
方法来初始化对象的状态,并且如果要定义类似于函数的行为,通常会定义一个 __call__
方法来使类实例可调用。
我原先以为叫什么函数都行,试了下就只能是call啊,并且必须有self用来实例化。(超zz发言)
正确定义一个类来模仿函数行为
class LastWordLength:
def __call__(self, s):
if not s:
return 0
else:
words = s.split()
length = len(words[-1])
return length
# 创建一个实例
lwl = LastWordLength()
s = "hello nowcoder"
print(lwl(s)) # 输出 8
self实例
self
是一个约定俗成的命名惯例,用于引用类的实例本身。它是类方法中的第一个参数,用于访问类的属性和方法。
self 的作用
引用实例:
self 代表类的实例对象,允许你在类的方法内部访问该实例的属性和其他方法。
传递实例:
在类的方法定义中,self 作为第一个参数传递,允许方法访问和操作实例的属性。
为什么需要 self?
引用实例属性:self 使你能够在方法内部引用实例的属性。
方法调用:self 使你能够在方法内部调用其他方法。
实例的唯一性:每个实例都是独立的,self 确保每个实例都有自己的状态。