面向对象-其他

简介: 类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示是创建了一个实例属性。

目标


  • 面向对象三大特性
  • 类属性和实例属性
  • 类方法和静态方法


一,面向对象三大特性


  • 封装

将属性和方法写到类里面得操作即封装

封装可以为属性和方法添加私有权限


  • 继承

子类默认继承父类得所有属性和方法

子类可以重写父类属性和方法


  • 多态

传入不同得对象,产生不同得结果


二、多态


2.1了解多态


多态指得是一类事物有多种形态,(一个抽象类有多个子类,因而多态得概念依赖于继承)。


  • 定义:多态是一种使用对象得方式,子类重写父类方法,调用不同子类对象得相同父类方法,可以产生不同得执行结果


  • 好处:调用灵活,有了多态,更容易编写出通用得代码,做出通用得编程,以适应需求得不断变化


  • 实现步骤:

定义父类,并提供公共方法

定义子类,并重写父类方法

传递子类对象给调用者,可以看到不同子类执行效果不同


2.2体验多态


class Dog(object):
    def work(self):
        pass
class ArmyDog(Dog):
    def work(self):
        print('追击敌人。。。。')
class DtugDog(Dog):
    def work(self):
        print('追查毒品')
class Person(object):
    def work_with_dog(self,dog):
        dog.work()
ad=ArmyDog()
dd=DtugDog()
daqiu=Person()
daqiu.work_with_dog(ad)
daqiu.work_with_dog(dd)
"""
追击敌人。。。。
追查毒品
"""


三 类属性和实例属性


3.1类属性


3.1.1设置和访问类属性


  • 类属性就是 类对象 所拥有得属性,它被 该类得所有实例对象 所共有。


  • 类属性可以使用 类对象或 实例对象访问


class Dog(object):
    tooth=10
wangcai=Dog()
xiaohei=Dog()
print(Dog.tooth)
print(wangcai.tooth)
print(xiaohei.tooth)
""""
10
10
10
"""


类属性得优点:


  • 记录的某项数据始终保持一致时,则定义类属性


  • 实例属性 要求每个对象为其 单独开辟一份内存空间 来记录数据,而 类属性 为全类所共有,近占有一份内存,更加节省内存空间


3.1.2修改类属性


类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示是创建了一个实例属性。


class Dog(object):
    tooth=10
wangcai=Dog()
xiaohei=Dog()
#修改类属性修改
# Dog.tooth=20
# print(Dog.tooth)
# print(wangcai.tooth)
# print(xiaohei.tooth)
wangcai.tooth=200
print(Dog.tooth)
print(wangcai.tooth)
print(xiaohei.tooth)
""""
"""


四 类方法和静态方法


4.1类方法


4.1.1类方法特点


  • 需要用装饰器@classmehod;来标识其为类的方法,第一个参数必须是类对象,一般以cls作为第一个参数


4.1.2类方法使用场景


  • 当方法种 需要使用类对象 (如何访问私有属性时),定义类方法
  • 类方法一般和类属性配合使用


4.2静态方法


4.2.1静态方法特点


  • 需要通过装饰器@staticmehod来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象(形参没有self/cls)
  • 静态方法 也能够通过 实例对象 和 类对象访问


4.2.2静态方法使用场景


  • 当方法中既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象(类属性,类方法、创建实例等)时,定义静态方法


  • 取消不需要的参数传递,有利于 减少不必要的内存占用和性能消耗


class Dog(object):
    @staticmethod
    def info_prin():
        print('这是一个静态方法')
wangcai=Dog()
Dog.info_prin()
wangcai.info_prin()
"""
这是一个静态方法
这是一个静态方法
"""


相关文章
|
10月前
对面向对象的认识(一)
对面向对象的认识(一)
40 0
|
5月前
|
机器人 Java 数据安全/隐私保护
理解-面向对象
理解-面向对象
27 0
|
7月前
|
Java
1.7 面向对象
1.7 面向对象
31 0
|
7月前
面向对象《一》
面向对象《一》
17 0
|
8月前
|
Python
面向对象
面向对象。
37 0
|
10月前
|
C#
C#视频之面向对象
C#视频之面向对象
49 0
|
12月前
|
存储 搜索推荐 编译器
C++ 面向对象篇
C++程序在执行时,将内存大致分为四个区域; - 代码区:存放函数体的二进制代码,操作由系统管理 - 全局区:存放全局变量和静态变量以及常量 - 栈区:由编译器自动分配释放,存放函数的参数值(形参),局部变量等 - 堆区:由程序员分配和释放,若程序员不手动释放,系统在程序结束时自动回收
133 0
|
Java
2. 面向对象(三)
2. 面向对象(三)
109 0
|
Java
面向对象(三)
面向对象细节内容
72 0
|
设计模式 存储 安全
第4章 面向对象
面向对象的方方面面(异常单独列一章)。
142 0