Python 面向对象

Python语言的面向对象特性

刚开始用博客不久,不会排版,将就放着先
学习多篇文章进行了自己的理解和注释,附原文链接
1:https://blog.csdn.net/CLHugh/article/details/75000104(self用法介绍)
2:https://www.cnblogs.com/xuyaowen/p/OO.html(不同编程语言面向对象异同分析)
3:super继承:https://www.cnblogs.com/xiamaojjie/p/11977151.html

类与实例

定义一个类
class Student(object):	#class Student 继承自object`在这里插入代码片`
🕐	pass
🕑	def __init__(self, name, score):
        self.name = name			#属性变量			
        self.score = score
🕑	def __init__(self, name, score):
        self.__name = name		#私有变量,此时外部不可通过实例.__name访问
        self.__score = score
	def print_score(self):
        print("%s: %s" % (self.name, self.score))
 关于__init__方法
 (1)第一个参数永远是self((不可缺少!)),表示创建的类实例本身,绑定属性
 (2)有了__init__方法,就不能传入空参数,必须传入与__init__方法匹配的参数,
 	但self不需要传,Python解释器会自己把实例变量传进去;

其他方法
(1)定义的时候第一参数永远是类的本身实例变量self(不可缺少!!),调用时候不用传该参数
(2)参数可以用默认参数、可变参数或者关键字参数(*args是可变参数,args接收的是一个tuple,
	 **kw是关键字参数,kw接收的是一个dict)
  
  变量名类似__xxx__以双下划线开头,并且以双下划线结尾的,是特殊变量,不是private变量,可直接访问
创建实例(方法为类名+())
	🕐sturent=Student( )
	🕑student=Student('ZhangSan',99)

补充:关于self的作用说明

	#self代表的是类的实例。
	#self.__class__则指向类
class Test:
    def ppr(self):			
        print(self)				#<__main__.Test object at 0x000000000284E080>
        print(self.__class__)	#<class '__main__.Test'>
t = Test()
t.ppr()	#此时定义一定要有self
Test.ppr() #此时定义和调用时均不传类实例是可以的,这就是类方法。

在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了self的类的实例。

class Parent:
    def pprt(self):
        print(self)

class Child(Parent):
    def cprt(self):
        print(self)
c = Child()
c.cprt()
c.pprt()
p = Parent()
p.pprt()

运行结果

<__main__.Child object at 0x0000000002A47080>
<__main__.Child object at 0x0000000002A47080>
<__main__.Parent object at 0x0000000002A47240>

运行c.cprt()时应该没有理解问题,指的是Child类的实例。
但是在运行c.pprt()时,等同于Child.pprt©,所以self指的依然是Child类的实例,由于self中没有定义pprt()方法,所以沿着继承树往上找,发现在父类Parent中定义了pprt()方法,所以就会成功调用。

在描述符类中,self指的是描述符类的实例(绕晕了,占坑后续)
	https://blog.csdn.net/CLHugh/article/details/75000104

封装

(1)访问机制
Python提供的访问控制机制,分别是: public和private;
Python中,如果函数、类方法和属性如果以两个下划线开头,
但是不以两个下划线结束,它就是private的,其他的一切都
是public的。
(2)  对象的独立性:
Python中对象本身不具有独立性,也即对象一定属于某一个类;
(3) 类本身是不是对象?(C++ java类的本身不是对象)
Python中类本身是对象;
(4) 基于类的模型,还是基于对象或原型的模型?(c++ java D)
Python是基于对象的模型;

继承

1.在Python中,所有类都是Object类的子类
2.Python采用两种继承方式,分别是:
普通继承方式;
super继承方式(贪婪继承);在super机制里可以保证公共父类仅被执行一次。

class A:
	def test(self):
		print('test')
class B(A):				#继承
	pass
	
b=B()
b.test()
class A:
	def test(self):
		print('test')
class B(A):
	def test(self):
		#A.test(self)		#调用父类方法
		super(B,self).test()	#super方式
		
b=B()
b.test
super在项目中的实际以用,以urlib库为例
https://www.cnblogs.com/xiamaojjie/p/11977151.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值