【10.2 python中的类的定义和使用】

python中的类的定义和使用


下面将详细介绍Python中类的定义和使用,包括定义类、创建类的实例、创建__init__()方法、创建类的成员并访问它们,以及访问限制等。

1. 定义类

在Python中,定义类使用class关键字后跟类名。类体中的代码块(通过缩进来定义)可以包含方法定义和变量赋值(这些变量称为类属性,但通常用于定义静态变量或常量,而不是实例属性)。

class MyClass:
    # 类属性(静态变量或常量)
    class_attribute = "I'm a class attribute"

    # 构造函数,用于初始化实例
    def __init__(self, name, age):
        self.name = name  # 实例属性
        self.age = age    # 实例属性

    # 类的方法
    def greet(self):
        return f"Hello, my name is {self.name} and I am {self.age} years old."

2. 创建类的实例

创建了类之后,你可以通过类名后跟圆括号(可以包含传递给__init__()方法的参数)来创建类的实例(对象)。

my_instance = MyClass("Alice", 30)

3. 创建__init__()方法

__init__()方法是一个特殊的方法,称为类的构造函数或初始化方法。当创建类的新实例时,Python会自动调用这个方法。self参数是对实例自身的引用,用于访问类的属性和其他方法。

def __init__(self, name, age):
    self.name = name  # 创建实例属性name
    self.age = age    # 创建实例属性age

4. 创建类的成员并访问

类的成员可以是属性(变量)或方法(函数)。属性可以是实例属性(属于类的每个实例)或类属性(属于类本身,所有实例共享)。

  • 访问实例属性:通过实例名和点号(.)后跟属性名来访问。

    print(my_instance.name)  # 输出: Alice
    print(my_instance.age)   # 输出: 30
    
  • 访问类属性:通过类名和点号(.)后跟属性名来访问。但请注意,通过实例也可以访问类属性,但这通常不是最佳实践。

    print(MyClass.class_attribute)  # 输出: I'm a class attribute
    print(my_instance.class_attribute)  # 也可以通过实例访问,但不建议这样做
    
  • 调用方法:通过实例名和点号(.)后跟方法名来调用。

    print(my_instance.greet())  # 输出: Hello, my name is Alice and I am 30 years old.
    

5. 访问限制

Python没有像某些其他语言(如Java)那样的严格访问控制关键字(如publicprivateprotected)。但是,Python社区有一个约定俗成的规则,即使用单下划线(_)前缀表示受保护的成员(即不建议从类的外部直接访问),使用双下划线(__)前缀表示私有成员(即Python会对其进行名称改写,以避免子类中的命名冲突)。

class MyClass:
    def __init__(self, name):
        self._protected_attribute = name  # 受保护的属性
        self.__private_attribute = "Private"  # 私有属性

    # 注意:虽然可以定义私有方法,但通常不推荐这样做,因为Python不是基于访问修饰符的语言
    def __private_method(self):
        return "This is a private method."

# 尝试访问私有和受保护的成员将导致错误或警告(尽管私有成员在内部可以通过_ClassName__private_attribute的形式访问)
# print(my_instance._protected_attribute)  # 正确,但不推荐从外部访问
# print(my_instance.__private_attribute)  # 错误,直接访问会抛出AttributeError

然而,需要注意的是,Python的私有成员(双下划线前缀)并不是真正的私有,而是一种命名约定加上Python的名称改写机制(name mangling)。因此,从技术上讲,仍然可以通过特定的方式(使用_ClassName__attribute_name的形式)访问这些“私有”成员,但这并不符合Python的社区规范和最佳实践。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值