python-面向对象--self

本文通过实例演示了Python的继承与多态特性,解释了动态语言如何灵活地处理对象类型,只要对象具备所需方法即可。同时,文章涵盖了Python中特性(property)、静态方法、类方法及__str__的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

self用法总结
静态语言和动态语言

对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,
否则,将无法调用run()方法。

对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了:

### 演示继承和多态

class Animal(object):
    def run(self):
        print('this animal is running,it\'s %s'%(self))


class Dog(Animal):
    def run(self):
        print('Dog is running')

    def eat(self):
        print('Dog is eating')
    pass

class Cat(Animal):
    def run(self):
        print('Cat is running')

    def eat(self):
        print('Cat is eating')
    pass

dog = Dog()
dog.run()

cat = Cat()
cat.run()

class Timer(object):
    def run(self):
        print('Start...')

# 对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,
# 否则,将无法调用run()方法。
#
# 对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了:

def run_twice(animal):
    animal.run()
    animal.run()

run_twice(Dog())
run_twice(Cat())
run_twice(Timer())
Dog is running
Cat is running
Dog is running
Dog is running
Cat is running
Cat is running
Start...
Start...
python基础----特性(property)、静态方法(staticmethod)、类方法(classmethod)、__str__的用法

https://www.cnblogs.com/wangyongsong/p/6750454.html

### Python 面向对象编程基础语法 #### 创建类与实例化对象 Python 是一门从设计之初就支持面向对象特性的语言,因此创建类和对象非常简单。定义一个新类型的语句即 `class` 关键字[^1]。 ```python class Dog: """A simple example class""" def __init__(self, name): # 构造函数 self.name = name def bark(self): return f"{self.name} says woof!" ``` 在此例子中,`Dog` 类有一个构造函数 `__init__()` 和一个名为 `bark` 的方法。当创建一个新的 `Dog` 对象时,会自动调用该构造函数来初始化对象属性[^2]。 #### 继承机制 子类可以继承父类的功能并扩展或修改其行为。这允许代码重用以及建立清晰的关系层次结构。 ```python class Animal: def speak(self): raise NotImplementedError("Subclasses must implement this method") class Cat(Animal): def speak(self): return "Meow" ``` 这里展示了如何让 `Cat` 类继承自 `Animal` 基础类,并实现了自己的版本的 `speak` 方法。 #### 不同类型的方法 在 Python 中有三种主要类型的方法:实例方法、类方法和静态方法。每种都有不同的用途: - **实例方法**: 接受第一个参数作为当前实例(`self`)。 - **类方法**: 使用装饰器 `@classmethod` 定义;接收的第一个参数是代表类本身的 `cls` 参数而不是具体的实例。 - **静态方法**: 利用 `@staticmethod` 装饰符声明;既不接受 `self` 也不接受 `cls` 参数,它们就像普通的函数一样工作,只是逻辑上属于某个特定类别[^3]。 ```python from datetime import date class Person: def __init__(self, name, age): self.name = name self.age = age @classmethod def from_birth_year(cls, name, birthYear): return cls(name, date.today().year - birthYear) @staticmethod def is_adult(age): return age >= 18 ``` 在这个例子中,`Person.from_birth_year` 是一个类方法,它提供了一种替代的方式来构建 `Person` 实例。而 `is_adult` 则是一个静态方法,用于判断给定年龄是否成年。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值