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)!