Python 高级编程之面向对象(一)_python高级编程面向对象

x = MyClass()

访问类的属性和方法

print(“MyClass 类的属性 i 为:”, x.i)
print(“MyClass 类的方法 f 输出为:”, x.f())
复制代码


#### 2)类属性


python类属性分为:**私有属性**和**公开属性**,python是没有什么修饰符的,像java就分的更细致,通过private(私有级)、protected(受保护级)、无前缀(默认级)、public(公开级)控制权限。


* `私有属性(__private_attrs)`:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 `self.__private_attrs`。
* `公开属性(private_attrs)`:不带两个下划线开头,可以在类外访问,通过实例名访问,也可以在类中访问。


示例如下:



#!/usr/bin/python3

class JustCounter:
__secretCount = 0 # 私有变量
publicCount = 0 # 公开变量

def count(self):
    self.__secretCount += 1
    self.publicCount += 1
    print (self.__secretCount)

counter = JustCounter()
counter.count()
counter.count()
print (counter.publicCount)
print (counter.__secretCount) # 报错,实例不能访问私有变量
复制代码


#### 3)类方法


类方法也是分为:**私有方法**和**公开方法**,但是私有变量属性一把通过set/get公开方法操作。 示例如下:



class Parents(object):
__name = “test”
__age = 35

# 设置姓名
def set_name(self, name):
    self.__name = name

# 获取姓名
def get_name(self):
    return self.__name
    
# 设置年龄
def set_age(self, age):
    self.__age = age

# 获取年龄
def get_age(self):
    return self.__age

if name == “main”:
# 实例化
p = Parents()
# 调用公有方法去设置属性
p.set_age(30)
# 获取私有属性
print(p.get_age())

# 调用公有方法去设置属性
p.set_name("zhangsan")
# 获取私有属性
print(p.get_name())

复制代码



> 
> 【温馨提示】`self` 的名字并不是固定的,也可以使用 this,但是最好还是按照约定使用 self。
> 
> 
> 


#### 4)构造方法(**init**)



> 
> **init** : 构造函数,在生成对象时调用。
> 
> 
> 


示例如下:



class Parents(object):
__name = “test”
__age = 35

def __init__(self, name, age):
    self.__name = name
    self.__age = age

# 设置姓名
def set_name(self, name):
    self.__name = name

# 获取姓名
def get_name(self):
    return self.__name
    
# 设置年龄
def set_age(self, age):
    self.__age = age

# 获取年龄
def get_age(self):
    return self.__age

if name == “main”:
# 实例化
p = Parents(25, “lisi”)
# 获取私有属性
print(p.get_age())
# 获取私有属性
print(p.get_name())
复制代码


不单单有构建函数,还有其它专有的函数,都是自动去调用的:


* `__init__` : 构造函数,在生成对象时调用
* `__del__` : 析构函数,释放对象时使用
* **repr** : 打印,转换
* **setitem** : 按照索引赋值
* **getitem**: 按照索引获取值
* **len**: 获得长度
* **cmp**: 比较运算
* **call**: 函数调用
* **add**: 加运算
* **sub**: 减运算
* **mul**: 乘运算
* **truediv**: 除运算
* **mod**: 求余运算
* **pow**: 乘方


### 三、面向对象封装、继承和多态


面向对象编程有三大特点:**封装**、**继承**和**多态**。


#### 1)封装


**就是将一个类的属性、方法全部包装到了一个类中**。一般设置属性为私有的,通过方法去调用,当然有些方法只需要在类内部使用也是可以设置成私有的方法的,**通过公开的方法来供外部间接调用这些“封装”好的属性和方法,这就是封装。**


其实上面的示例就是很好的证明,内部定义私有属性,外部通过公开的方法访问。



class Parents(object):
__name = “test”
__age = 35

def __init__(self, name, age):
    self.__name = name
    self.__age = age

# 设置姓名
def set_name(self, name):
    self.__name = name

# 获取姓名
def get_name(self):
    return self.__name
    
# 设置年龄
def set_age(self, age):
    self.__age = age

# 获取年龄
def get_age(self):
    return self.__age

if name == “main”:
# 实例化
p = Parents(25, “lisi”)
# 获取私有属性
print(p.get_age())
# 获取私有属性
print(p.get_name())
复制代码


#### 2)继承


继承就非常好理解了,其实通过字面意思理解就行了,一个类是另一个类的子类,那么这个类就可以拥有和父类一样的属性、方法。这就好比是现实当中,儿子继承父母的遗产一样。但是需要注意的是私有属性和**私有方法是无法继承的**,其它语言也是一样的。


在Python中,所有类默认继承`object`类,object类是顶级类或基类;其他子类叫做派生类。


示例如下:



class Animal(object):
# 无法给继续子类
__name = “”
# 可以继承给子类
color = “”

def __init__(self, name, color):
    self.__name = name
    self.color = color

# 可以继承给子类
def set_name(self, name):
    self.__name = name

def get_name(self):
    return self.__name

def set_color(self, color):
    self.color = color

# 无法给继续子类
def __get_color(self):
    return self.color

class Cat(Animal):
def init(self, name, color):
self.name = name
self.color = color
# 调用父类构造函数
super(Cat, self).init(name, color)
# Animal.init(name, color)

# 重写父类方法
def set_name(self, name):
    self.name = name

# 重写父类方法
def get_name(self):
    return self.name

if name == “main”:
c = Cat(“小猫”, “黑色”)
# 获取父类公开属性
print(c.color)

# 调用子类方法重写的方法
c.set_name("大猫")

复制代码


**多继承**:所谓多继承意思就是一个类同时继承了多个父类


示例如下:



#类定义
class people:
#定义基本属性
name = ‘’

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

加入社区:https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值