"""
object类
1、object是所有类的父类,所有类都有object类的属性和方法
2、内置函数dir()可以查看指定对象所有属性
3、object有一个_str_()方法,用于返回一个对于对象的描述
对应于内置函数str()经常用于print方法,帮我们查看对象的信息,对_str_()进行重写
"""
class Student:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return '我的名字是{0},今年{1}岁'.format(self.name,self.age)
stu=Student('张三',23)
print(dir(stu))
print(stu)#我的名字是张三,今年23岁
print(type(stu))
"""
多态
1.具有多种形态,不知道一个变量所引用的对象到底是什么类型
但是仍然可以通过这个变量调用方法,在运行的过程中根据对象所引用的类型
动态决定调用对象中的那一个方法
2.不需要关心对象是什么类型,只需要关心对象的行为
静态语言实现多态的三个必要条件:
1.继承
2.方法重写
3.父类引用指向子类对象
"""
class Animal(object):
def eat(self):
print('动物会吃')
class Dog(Animal):
def eat(self):
print('狗吃骨头')
class Cat(Animal):
def eat(self):
print('猫吃鱼')
class Person:
def eat(self):
print('人吃五谷杂粮')
#定义一个函数
def fun(obj):
obj.eat()
fun(Cat())
fun(Dog())
fun(Person())
class A:
pass
class B:
pass
class C(A,B):
def __init__(self,name,age):
self.name=name
self.age=age
class D(A):
pass
#创建C类的对象
x=C('jack',23)a=100
b=200
c=a+b
d=a.__add__(b)
print(c)#300
print(d)#300
class Student:
def __init__(self,name):
self.name=name
def __add__(self, other):
return self.name+other.name
def __len__(self):
return len(self.name)
stu1=Student('张三肝')
stu2=Student('李四')
s=stu1+stu2#实现了两个对象的运算,在Student中使用__add__方法
print(s)
print(len(stu1))
print(x.__dict__)#实例对象的属性字典{'name': 'jack', 'age': 23}
print(x.__class__)#输出对象所属的类<class '__main__.C'>
print(C.__class__)#C类的父类元素
print(C.__mro__)#类的层次结构
print(A.__subclasses__())#子类的列表