Python学习3:Python面向对象

1 类与对象

1.1 类的定义

class Turtle:#Python 中的类名约定以大写字母开头
'''关于类的一个简单例子…'''

	#属性
	color='green'
	weight=10
	legs=4
	shell=True
	mouth='大嘴'
	
	#方法
	def climb(self):
		print("我正在很努力的向前爬...")
	def run(self):
		print("我正在飞快的向前跑...")
	def bite(self):
		print("咬死你咬死你!!")
	def eat(self):
		print("有得吃,真满足_A")
	def sleep(self):
		print("困了,睡了,晚安,Zzzz")

1.2 对象操作

tt = Turtle()
tt.climb()

同C++的static,python的类可以通过类名直接调用方法。
在这里插入图片描述

1.3 公有和私有

python中没有C++的public和private关键字,但并不意味着Python的所有属性都是公有的。
name mangling(名字改编,名字重整):在Python中定义私有变量只需要在变量名或函数名前加上“两个下划线 __ ”,那么这个函数或变量就会为私有的了。
要查看私有变量,要通过定义get函数

class Person:
	__name="whx"
	def getName(self):
		return self.name

p = Person()
p.__name #报错,无法访问private变量
p.getName() #成功

1.4 self

Python的 self 相当于C++的 this 指针.
不同于C++,self在函数的定义时必须要写在括号里,调用时省去。

2 面向对象

2.1 封装

做到信息屏蔽,成为一个独立的模块。

2.1 继承

同C++,子类可以享用父类的公有方法。
继承格式不同于C++,采用子类(父类)的形式class DerivedClassName(BaseClassName):

class MyList(list):
	pass

pass:Python pass 是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。

如果子类中定义与父类同名的方法或属性(重写),则会自动覆盖父类对应的方法或属性。若不想覆盖,可以使用super函数。

class Derived(Based): 
	def __init__ (self): 
		super(). __init__() #执行子类的构造方法前,先调用父类的构造方法

此外,python支持多重继承,但尽量避免使用。

class DerivedClassName(Base1,Base2,Base3):

2.3 多态

多态定义:不同对象对同一方法响应不同行动。

class A:
	def fun(self):
		print("我是小A…")
class B:
	def fun(self):
		print"我是小B…")
a=A()
b=B()
a.fun() #我是小A…
b.fun() #我是小B…

3 魔法方法

所谓魔法方法,就是在适当的时候会被调用的方法。可以认为是C++里面BIG_THREE的变种(构造和析构、操作符重载),当然也有其他类型。这些是有默认版本的,我们可以根据需要进行重载。
1、__init__ (self [,...]):是对构造方法并且进行初始化。
2、__new__(cls [,...]):同C++的构造函数。
3、__del__(self):同C++的析构函数。
4、__add__ (self,other):对加法操作的操作符重载。同理可以操作符重载其他符号。
5、__getattr__(self,name):定义当用户试图获取一个不存在的属性时的行为
6、__getattribute__(self,name):定义当该类的属性被访问时的行为
7、__setattr__(self,name,value):定义当一个属性被设置时的行为
8、__delattr__(self,name):定义当一个属性被删除时的行为。
9、__get__(self,instance,owner):用于访问属性,它返回属性的值
10、__set__(self,instance,value):将在属性分配操作中调用,不返回任何内容
11、__delete__(self,instance):控制删除操作,不返回任何内容
还有很多其他魔法方法,具体标志为:魔法方法总是被双下划线包围,请读者自行学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值