1.python类的简单介绍
2.self和cls参数介绍
3.一些简单代码实例
在Python中的,类时一种面向对象编程的机制,用于描述具有相同属性的和方法的对象的集合。类定义了一组属性和方法,可以用来创建对象的模板。类定义了一组属性和方法,可以用来创建对象的模板。类可以看作一种自定义的数据类型,它可以包含多个实例,每个实例都具有相同的属性和方法。
类的定义通常包括类名、属性和方法在类定义中,我们可以定义类属性、类方法、实例属性和实例方法等。类属性是整个类的属性,可以通过类名来访问。实例属性是属于实例的属性,只能通过实例名来访问。类方法和实例方法是类中的函数,可以用来执行特定的操作。
以下是一个简单的类定义示例:
class Person:
# 类属性
num_of_persons = 0
def __init__(self, name, age):
# 实例属性
self.name = name
self.age = age
Person.num_of_persons += 1
# 实例方法
def say_hello(self):
print("Hello, my name is", self.name)
# 类方法
@classmethod
def get_num_of_persons(cls):
return cls.num_of_persons
在上述示例中,我们定义了一个名为Person的类,它具有一个类属性num_of_persons,表示创建的Person实例的数量。在构造方法__init__()中,我们定义了两个实例属性name和age,并将类属性num_of_persons加1。实例方法say_hello()用于打印一个问候语,其中包含实例属性name的值。类方法get_num_of_persons()返回类属性num_of_persons的值。
使用该类,我们可以创建多个Person的实例,并访问它们的属性和方法。例如,以下代码创建了两个Person实例p1和p2,并调用了它们的实例方法say_hello():
p1 = Person("Alice", 25)
p2 = Person("Bob", 30)
p1.say_hello()
p2.say_hello()
输出结果为:
Hello, my name is Alice
Hello, my name is Bob
我们还可以通过类方法get_num_of_persons()来获取Person实例的数量。例如,以下代码输出了当前创建的Person实例的数量:
print(Person.get_num_of_persons())
输出结果为:2
在Python中,self和cls都是特殊的参数,用于表示实例和类本身。
self是一个表示实例本身的参数,用于在实例方法中访问实例属性、调用其他实例方法等。在实例方法中,self参数会自动绑定到调用该方法的实例上。
cls是一个表示类本身的参数,用于在类方法中访问类属性、调用其他类方法等。在类方法中,cls参数会自动绑定到该类本身上。
例如,在以下示例中,我们定义了一个名为Person的类,它具有一个类属性num_of_persons,表示创建的Person实例的数量。在构造方法__init__()中,我们定义了两个实例属性name和age,并将类属性num_of_persons加1。实例方法say_hello()用于打印一个问候语,其中包含实例属性name的值。类方法get_num_of_persons()返回类属性num_of_persons的值。
class Person:
num_of_persons = 0
def __init__(self, name, age):
self.name = name
self.age = age
Person.num_of_persons += 1
def say_hello(self):
print("Hello, my name is", self.name)
@classmethod
def get_num_of_persons(cls):
return cls.num_of_persons
p1 = Person("Alice", 20)
p2 = Person("Bob", 25)
p1.say_hello()
print("Number of persons:", Person.get_num_of_persons())
输出结果为:
Hello, my name is Alice
Number of persons: 2
可以看到,我们在构造方法__init__()中使用了self参数来访问实例属性name和age,以及cls参数来访问类属性num_of_persons。在实例方法say_hello()中,我们也使用了self参数来访问实例属性name。在类方法get_num_of_persons()中,我们使用了cls参数来访问类属性num_of_persons,并返回其值。
需要注意的是,虽然self和cls参数名并不是固定的,但是建议使用它们来表示实例和类本身,以便与Python的惯例保持一致。另外,类方法必须使用@classmethod装饰器来标识它是一个类方法,而实例方法不需要。
总之,self和cls都是特殊的参数,用于表示实例和类本身。self参数在实例方法中自动绑定到调用该方法的实例上,而cls参数在类方法中自动绑定到该类本身上。
3.一些简单代码实例
(1)定义一个简单的类
class MyClass:
def __init__(self, name):
self.name = name
def say_hello(self):
print(f"Hello, {self.name}!")
解释:这是一个简单的类,其中包含了一个构造函数 __init__
和一个方法 say_hello
。构造函数用于初始化类的属性,而方法 say_hello
用于输出一个问候语。
(2)继承一个父类
class MyChildClass(MyClass):
def say_goodbye(self):
print(f"Goodbye, {self.name}!")
解释:这是一个继承自 MyClass
的子类 MyChildClass
,它新增了一个方法 say_goodbye
。子类可以继承父类的属性和方法,并且还可以新增自己的属性和方法。
(3)使用类的属性和方法
obj = MyClass("Alice")
obj.say_hello()
解释:这是使用类的属性和方法的代码示例。首先创建了一个 MyClass
的实例 obj
,并将其名字设置为 "Alice"。然后调用了 say_hello
方法,输出了一个问候语。
(4)使用类的继承和多态特性
obj1 = MyClass("Alice")
obj2 = MyChildClass("Bob")
for obj in [obj1, obj2]:
obj.say_hello()
if isinstance(obj, MyChildClass):
obj.say_goodbye()
解释:这是一个使用类的继承和多态特性的代码示例。首先创建了两个实例 obj1
和 obj2
,分别是 MyClass
和 MyChildClass
的实例。然后使用一个循环遍历这两个实例,并调用它们的 say_hello
方法。在这个循环中,还使用了 isinstance
函数来判断当前实例是否是 MyChildClass
类型的,如果是,则调用它的 say_goodbye
方法。