自学内容网 自学内容网

Python(六)面向对象编程

类和实例

  • 类名:首字母大写+驼峰
  • 类中方法参数中的self,和直接打印实例化对象一致,是当前对象的内存中存储地址
class Person():
    def eat(self):
        print('我喜欢吃零食')
        print(self)
    def drink(self):
        print('我喜欢喝果汁')


p1=Person()
print(p1)

p1.eat()

在这里插入图片描述

魔术方法

__init__

由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法

  • __init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身
  • 有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传
  • __init__方法在创建一个对象时默认被调用,不需要手动调用
class Person():
    def __init__(self, name, age):
        self.name = name
        self.age = age

p1=Person('orange',18)

print(p1.name)

__str__

当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__方法,那么就会打印从在这个方法中 return 的数据

class Person():
    
    # 定义初始化功能的函数
    def __init__(self, name, age, address):
        # 添加实例属性
        self.name = name
        self.age = age
        self.address = address

    def __str__(self):
        """ 返回一个对象的描述信息 """
        return f'姓名:{self.name},年龄:{self.age},地址:{self.address}'
    
        
p1 = Person('orange', 18, 'shandong')
print(p1)

__del__

当删除对象时,python解释器也会默认调用__del__()方法

class Person():
    
    # 定义初始化功能的函数
    def __init__(self, name, age, address):
        # 添加实例属性
        self.name = name
        self.age = age
        self.address = address
    
    def __del__(self):
        print(f'{self}对象已经被删除')
        
p1 = Person('orange', 18, 'shandong')

# <__main__.Person object at 0x101af8f90>对象已经被删除
del p1

私有属性、私有方法

在属性名和方法名 前面 加上两个下划线 “__”

class Girl:
    def __init__(self):
        self.name = 'orange'
        self.__age = 18

    def __showinfo(self):
        print('姓名:%s,年龄:%d' % (self.name, self.__age))

    def showInfo(self):
        print('姓名:%s,年龄:%d' % (self.name, self.__age))

girl = Girl()
print(girl.name)
girl.showInfo()

print(girl.__age)
girl.__showinfo()

在这里插入图片描述

继承

单继承

  • 继承:一个类从另一个已有的类获得其成员的相关特性,就叫作继承!

  • 派生:从一个已有的类产生一个新的类,称为派生!

  • 很显然,继承和派生其实就是从不同的方向来描述的相同的概念而已,本质上是一样的!

  • 父类:也叫作基类,就是指已有被继承的类!

  • 子类:也叫作派生类或扩展类

  • 扩展:在子类中增加一些自己特有的特性,就叫作扩展,没有扩展,继承也就没有意义了!

  • 单继承:一个类只能继承自一个其他的类,不能继承多个类,单继承也是大多数面向对象语言的特性!

  • 多继承:一个类同时继承了多个父类, (C++、Python等语言都支持多继承)

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

class Dog(Animal):
    # 重写run方法
    def run(self):
        print('Dog is running...')


class Cat(Animal):
    def run(self):
        print('Cat is running...')
        # 调用父类的run方法
        super().run()

dog = Dog()
cat = Cat()
dog.run()
cat.run()

多继承

class Father(object):
    pass

class Mother(object):
    pass

class Child(Father, Mother):
    pass

多态

class Animal:
    ...

class Dog(Animal):
    ...

class Cat(Animal):
    ...
    
animal = Animal()
dog = Dog()
cat = Cat()
print(isinstance(animal, Animal)) # True
print(isinstance(dog, Animal)) # True

获取对象信息

  • type() 判断对象类型 返回对应的Class类型
  • isinstance() 可以判断class的类型
  • dir() 获得一个对象的所有属性和方法

原文地址:https://blog.csdn.net/cwjxyp/article/details/144762092

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!