pyton学习笔记

在 Python 中,`__init__` 方法有两种主要的使用场景:一个是包中的 `__init__.py` 文件,另一个是类中的 `__init__` 方法。虽然它们都被称为 `__init__`,但它们的用途和作用是完全不同的。下面分别介绍这两种 `__init__` 的用途和使用方法。

包初始化 (__init__.py)

# my_package/__init__.py
from .module1 import function1
from .module2 import function2

__all__ = ['function1', 'function2']
# 使用包
from my_package import function1, function2

function1()
function2()

类初始化 (__init__ 方法)

class Person:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age

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

# 创建对象
john = Person("John", 30)

# 调用实例方法
print(john.greet())  # 输出: Hello, my name is John and I am 30 years old.

通过理解这两种 __init__ 的不同用途,你可以更好地组织和初始化你的 Python 项目和类。

动态给对象添加方法

import types

class MyClass:
    def __init__(self, value):
        self.value = value

def new_method(self):
    return f"This is a method for {self.value}"


# 创建一个 MyClass 的实例
obj = MyClass(10)

# 将函数 new_method 动态地添加为 obj 的方法
obj.new_method = types.MethodType(new_method, obj)

# 调用新添加的方法
print(obj.new_method())  # 输出:This is a method for 10

self用于访问类的属性和方法,方法里面必须加上self,表示调用方法的当前对象(会隐式转递),如果不加self是静态方法,需要使用@staticmethod注解,同时就可以直接通过类名.方法名访问。

__name__: 在本模块中就是__main__,其他模块中__name__就是代表模块名,用于本模块中代码测试,导入到其他模块中不会运行。

python中的封装:以双下划线开头__的方法和变量是私有的,类外需要通过公有的方法来访问。

继承

# 定义一个父类
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")

# 定义一个继承自 Animal 的子类
class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

# 定义一个继承自 Animal 的子类
class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

类型注解:

  • 基本数据类型注解
  • 实例对象类型注解
  • 容器类型注解
  • 容器详细类型注解
  • 函数/方法中类型注解
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值