Python教程

python之面向对象

本文主要是介绍python之面向对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

对象的独有功能

# 上一篇我们学习了对象的独有数据,现在讲讲对象的独有功能/也称方法
class Person:
    school = '蓝翔挖掘机炒菜学校'

    def __init__(self, name):  # 让对象拥有独有数据的函数一般建议写在公共方法上面
        self.name = name
        # 让对象拥有独有数据
    def eat(self):
        print('%s说用挖掘机炒菜真香!!!!'%self.name)
        # 对象公共功能 ,但是对象调用的话就会将对象本身当作第一个参数传入,可以当作是对象的独有功能


res1 = Person('summer')
res1.eat()   # summer说用挖掘机炒菜真香!!!!

res2 = Person('jaja')
res2.eat()  # jaja说用挖掘机炒菜真香!!!

类名直接调用公共功能的话是会报错的,必须要传对应的参数进去
Person.eat() ×
res3 = Person('jason')
Person.eat(res3)  # jason说用挖掘机炒菜真香!!!!
 

image

动静态方法

# 专门在类体中编写的函数分为三个方法
1.绑定给对象的方法

eg:
class Person:
    school = '蓝翔挖掘机炒菜学校'

    def stu(self):
        # 绑定给对象的方法
        print('上课越来越认真了啊!!',self)
res = Person()
res.stu() # 上课越来越认真了啊!!
------------
2.绑定给类的方法
class Person:
    school = '蓝翔挖掘机炒菜学校'

    def stu(self):
        # 绑定给对象的方法
        print('上课越来越认真了啊!!',self)

    @classmethod  # 想让类调用的话需要用这个装饰器
    def cooking(cls):
        # 绑定给类的方法
        print('挖掘机炒菜功能越来越6了')

rea = Person()
Person.cooking()  # 挖掘机炒菜功能越来越6了     <class'__main__.Person'> 
res = Person()
res.stu() # 上课越来越认真了啊!!
res.cooking() #挖掘机炒菜功能越来越6了  <class '__main__.Person'>
3.普通函数(也是静态方法)
    @staticmethod   # 需要用装饰器
    # 静态方法
    def run(a,b):
        print('我爱挖掘机')

rea = Person()
Person.run(1,2)  # 我爱挖掘机
res = Person()
res.run(1,3)  # 我爱挖掘机
动静态方法总结
1.绑定给对象的方法 使用self
直接让对象自身当作第一个参数传入

2.绑定给类的方法 @classmethod 加语法糖
将类名本身当作第一个参数传入 
而对象来调用绑定给类的方法时,会自动将产生该对象的类作为第一个参数传入

3.静态方法  @staticmethod  加语法糖
就是函数本身了,调用的时候括号内有几个参数就需要传几个参数,不管是对象还是。

面向对象三大特性之继承

面向对象三大特性分别是:
继承、封装、多态
# 写法
class 类名(类名):
        pass
	1.定义类的时候在类名后加括号
	2.括号内填写你需要继承的类名
 	3.括号内可以填写多个父类 逗号隔开即可

class C:
    house3 = 5

    def money3(self):
        print('不好好上课回家继承家业')


class person(C): # 定义继承类名的不用写冒号直接写括号加上需要继承的类
     pass

print(person.money3)
person.money3(1) # 不好好上课就回家继承家业


# 继承了类体内的所有代码
我们将被继承的类称之为: 父类或基类或超类 
eg:上述的c
我们将继承类的类称之为: 子类或派生类
eg:上述类person
ps:平时最常用的就是父类和子类

继承的本质

class people:
    def __init__(self, name, age, hobby):
        self.name = name
        self.age = age
        self.hobby = hobby

class teach(people):
     pass

class Student(people):
    def choice(self):
        print('正在选课')
teh = teach('sum',38,'shopping')
print(teh.__dict__)  # {'name': 'sum', 'age': 38, 'hobby': 'shopping'}
stu1 = Student('summer',18,'read')
print(stu1.__dict__)  # {'name': 'summer', 'age': 18, 'hobby': 'read'}


------------
对象:数据和功能的结合体
类:多个对象相同的数据和功能的结合体
父类:多个类相同的数据和功能的结合体
ps:类和父类最主要的功能其实就是节省代码

数据和方法的查找

不继承查找顺序
先从对象自身查找 没有的话 再去产生该对象的类中查找
class Student():

    def choice(self):
        print('正在选课')

res = Student()
res.choice() # 正在选课

单继承查找顺序
# 只要涉及到对象查找名字 几乎要回到最开始的位置依次查找
class A1:
    def func1(self):
        print('from A1 func1')

    def func2(self):
        print('from A1 func2')
        self.func1()  # obj.func1()


class MyClass(A1):
    def func1(self):
        print('from MyClass func1')


obj = MyClass()
obj.func2()  # from A1 func2  from MyClass func1
多继承查找顺序
# 继承多类
class A:
    house = 10
    def money(self):
        print('不好好上班就回来继承家业')

class B:
    house = 5
    def money(self):
        print('不好好上学就回来种红薯')

class C:
    house = 5
    def money(self):
        print('不好好上课就回村捡破烂')

class person(A, B, C):
	def money(self):
		print('好好学习天天向上')

print(person.money)
person.money(1)
# 多继承的话是按照继承的名称从左到右依次查找的
# 如果自己有的话就打印自己的:好好学习天天向上
# 如果自己没有A有的话就继承A:不好好上班就回来继承家业
# 如果A没有的话就继承B:不好好上学就回来种红薯、
# 如果AB都没有的话就继承C:不好好上课就回村捡破烂
ps:我这就是为了更直观的看出继承查找顺序写的类体代码,实际的继承本质是为了节省代码

image

经典类与新式类

经典类
	不继承object或其子类的类(什么都不继承)
# 在python2中 类不加object的话用句点符是点不出class该有的一些方法,必须要加上object才可以调用它的内置方法
python2中需要这么写:
 class MyClass(object):
 def func1(self):
        print('from MyClass func1')
新式类
	继承了object或其子类的类
class MyClass():  #   等同于这么写 class MyClass(object)
    def func1(self):
        print('from MyClass func1')
# 在python3中所有的类默认都会继承object ,也就是说python3里面只有新式类
object里面几乎都是类具备的功能 ,我们在调用class的时候其实是在调用object方法,因为class继承了object

派生方法

子类中定义类与父类一模一样的方法并且扩展了该功能>>>:派生
class people:
    def __init__(self, name, age, hobby):
        self.name = name
        self.age = age
        self.hobby = hobby

class teach(people):
    def __init__(self,name, age, hobby,job):
        super().__init__(name, age, hobby)   # 专门用于子类调用父类的方法
        self.job = job # 自己再增加想拥有的属性


class Student(people):
    def __init__(self,name, age, hobby,score): # 专门用于子类调用父类的方法
        super().__init__(name, age, hobby)
        self.score = score  # # 自己再增加想拥有的属性
这篇关于python之面向对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!