Python——面对对象and类
动静态方法
'''
动态方法:
1.绑定给对象的方法
2.绑定给类的方法
静态方法:
无论是类还是对象调用,都需要自己动手传参
'''
# coding:utf-8
class Student:
school = '蓝翔技校'
# 直接定义的函数,默认绑定给对象,类调用,有几个参数用传个
# 对象调用,第一个参数就是对象自身
def func(self):
print('绑定给对象')
# 被@classmethod修饰的函数,默认绑定给类
# 类调用第一个参数就是类自身
# 对象也可以调用,并且回自动将产生该对象的类作为第一个参数传入
@classmethod
def func1(cls):
print('绑定给类')
# 被@staticmethod修饰的函数,是静态方法
# 无论是类还是对象,调用都要自己手动传参
@staticmethod
def func2(num):
print('自己传参,丰衣足食')
obj = Student()
obj.func()
Student.func(1)
obj.func1()
Student.func1()
obj.func2(123)
Student.func2(123)
继承的概念
'''
面向对象的三大特性:
封装、继承、多态
1、继承的含义
表示类与类之间资源的从属关系
2、继承的目的
classA继承classB,那么A就拥有了B所有的数据和方法的使用权限,A是B的子类,B是A的父类
3、继承的使用
class C1:
pass
class c2(c1):
pass
4、继承的本质
对象:数据与功能的结合体
类(子类):多个对象相同数据和功能的结合体
父类:多个类(子类)相同数据和功能的结合体
1、抽象:将多个类相同的东西抽出去形成一个新的类
2、继承:将多个类继承刚刚抽出来的新的类
'''
class C1:
def func(self):
print('I\'m your father')
class C2:
school = '剑桥大学'
class C3(C1, C2):
pass
obj = C3()
obj.func()
print(obj.school)
名字的查找顺序
'''
1、不继承情况下的名字查找顺序
对象自身 >>> 产生对象的类
2、单继承情况下的名字查找顺序
对象自身 >>> 产生对象的类 >>> 父类
3、多继承情况下的名字查找顺序
对象自身 >>> 产生对象的类 >>> 父类(从左往右)
'''
# 没有继承的情况下
class C1:
hobby = 'dance'
obj = C1()
print(obj.hobby) # dance
obj.hobby = 'sing song'
print(obj.hobby) # sing song
# 单继承的情况下:
class C2(C1):
pass
obj1 = C2()
print(C2.hobby) # dance
obj1.hobby = 'sing song'
print(obj1.hobby) # sing song
# 多继承的情况下
class C3(C2,C1):
pass
obj2 = C3()
print(C3.hobby) # dance C1
print(obj2.hobby) # dance C1
经典类与新式类
'''
经典类:不继承object或者其子类的类
新式类:继承object或者其子类的类
在python2中有经典类和新式类
在python3中只有新式类(所有类默认都继承object)
'''
class Srudent(object):pass
ps:以后我们在定义类的时候,如果没有其他明确的父类.要习惯写object兼容
派生方法
'''
派生方法:
所谓派生方法就是子类基于父类的某个方法做了拓展
'''
class Person:
def __init__(self, name, age, sexy):
self.name = name
self.age = age
self.sexy = sexy
class Student(Person):
def __init__(self, name, age, sexy, sid):
# super().__init__ 是子类调用父类的方法
super().__init__(name, age, sexy)
self.sid = sid
class Teacher(Person):
def __init__(self, name, age, sexy, tid):
super().__init__(name, age, sexy)
self.tid = tid
obj = Student('maria', 18, 'woman', '202201008')
obj1 = Teacher('jason', 42, 'man', '19800000')
print(obj.__dict__)
print(obj1.__dict__)