python之OOP

本文深入讲解了面向对象编程的基础概念,包括如何定义类,操作类属性和函数,构造函数的运用,实例化过程,以及OOP的三大特性——封装、继承和多态。实例演示了普通函数、实例函数、类函数和静态函数的区别,以及如何在不同场景下调用这些函数。
摘要由CSDN通过智能技术生成

面向对象基础(OOP)

基本操作

定义类
# 法一
class one:
    pass  
# 法二
class two():
    pass
# 法三
class three(object):
    pass
属性、函数的调用
class teacher(object):
    name = '老师'   #属性
    age = 18        #属性
    def teaching(self):   #函数
        print('上课。。。。') 

#实例化一个对象
t1 = teacher()  
#实例化的对象调用类的属性
t1.name        
#实例化的对象调用类的函数
t1.teaching()

调用实例函数

class teacher(object):
	name = '老师'
	age = 18
	def intro(self):
		print('my name is {}'.format(self.name))
#实例化对象
t2 = teacher()
法一:实例调用实例函数
#实例作为一个参数放进函数中执行
t2.intro()


法二:类名调用实例函数
#类不会作为参数传入,此时函数需要一个参数执行
teacher.intro(t2)

类的函数

构造函数

构造函数:在对类实例化的时候,需要给类一些初始值
构造函数是在实例化的时候第一个被调用的函数。

class teacher(object):
    #构造函数:初始化的工作,不会返回值
    def __init__(self,name,age):   
        self.name = name
        self.age = age  
    def intro(self):
        print('My name is {}'.format(self.name))

dd = teacher('乐乐',19)
dd

***注:***构造函数中有参数,需要在调用类的时候传参执行

实例属性和类属性

OOP函数分类
  • OOP函数分为:
    • 普通函数
    • 实例函数
    • 类函数:类函数至少需要传入一个参数,默认把类名当作第一个参数传进去
    • 静态函数:一般不需要放参数
class school(object):
    name = '一个学校'
    age = 3
    
    #普通函数
    def hw():
    	print('hello world 1')
    #普通函数
    def hw2(name = '中学')print('hello world {}'.format(name))
    	
    #实例函数
    def hw3(self):
    	print('Hello world {}'.format(self.name))
    	
    #类函数:类函数至少需要传入一个参数,默认把类名当作第一个参数传进去
    @classmethod
    def hw4(cls):
    	print('hello world class {}'.format(cls.name))
    	
    #静态函数:一般不需要放参数
    @staticmethod
    def hw5():
    	print('hello')   
各函数调用方式
  • 调用方式
    • 类调用普通函数
    • 类调用静态函数
    • 实例调用普通函数:函数中没有参数会报错
    • 一般不用实例调用静态函数
t3 = school()
#类调用类函数
school.hw()
school.hw2()

# 实例调用类函数
# t3.hw()  会报错,实例作为参数传入,该函数没有参数
t3.hw2() #返回的是内存地址

# 类调用静态函数
school.hw5()

OOP三大特性

三大特性:封装、继承、多态

封装
 封装分为三类:
	public :内外部均可访问
	protected:只有父类、子类可访问(单下划线)
	private:只有本类自己访问(双下划线)
  • private
    1)内部访问
    2)外部访问:name_mangling方法 (实例._类名私有属性,可直接外部访问)
class teacher():
    name ='老师'
    #双下划线表示私有(private)属性
    __age = 18
    def __init__(self,name='乐乐',age=18):
        self.name = name
        self.__age = age
	def print_info(self):
        print('内部名称',self.name)
        print('内部年龄',self.__age)
       
ll = teacher()
# print(ll.__age) 表示类外使用会报错
#外部访问:name_mangling(实例._类名私有属性  可直接外部访问)
print(ll._teacher__age)

#法二:内部访问
ll.print_info()
继承
  • 优先调用自己的构造函数,其次调用父类的函数
class animal():
   def __init__(self,name):
        print('I am init in 鳄鱼',name)
class paxingani(animal):
    pass
class croc(paxingani):
    def __init__(self,name='noname'):
        print('I am init in 鳄鱼',name)

kaka = croc()
  • 自己有构造函数,但是需要调用父类的构造函数
class animal():
    def __init__(self,name):
        print('I am init in 鳄鱼',name)
class paxingani(animal):
    pass
class croc(paxingani):
    def __init__(self):
        # 法一:super(子类名称,self(作为自己的实例)).__init__('参数')
        super(croc,self).__init__('ddd')


        # 法二:父类名称.__init__(self,'参数')
        animal.__init__(self,'ddd')
        print('I am 大鳄鱼 ')

继承特点

  • 所有的类都是继承自object类,即所有的类都是object类的子类

  • 子类一旦继承父类,则可以使用父类中除私有成员外的所有内容

  • 子类继承父类后并没有将父类成员完全赋值到子类中,而是通过引用关系访问调用

  • 子类中可以定义独有的成员属性和方法,也就是说子类不但可以继承,还可以发扬光大

  • 子类中定义的成员和父类成员如果相同,则优先使用子类成员

  • 子类如果想扩充父类的方法,可以在定义新方法的同时访问父类成员来进行代码重用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值