面向对象-其他

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

目标


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


一,面向对象三大特性


  • 封装

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

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


  • 继承

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

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


  • 多态

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


二、多态


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()
"""
这是一个静态方法
这是一个静态方法
"""


相关文章
|
2月前
|
Java
面向对象
面向对象
37 7
|
6月前
|
C++
c++面向对象
c++面向对象
42 0
面向对象(1)
面向对象(1)
77 0
|
存储 Java 编译器
初步认识面向对象
初步认识面向对象
|
Java 编译器
初识面向对象上
初识面向对象上
127 0
初识面向对象上
|
Java
面向对象(三)
面向对象细节内容
91 0
|
Java
面向对象(二)
javase内容
75 0
|
Java 关系型数据库 程序员
面向对象是什么
近两年设计了几个系统,不管是直接使用传统设计ER图,还是使用4C建模,但在做架构评审时,ER却都是重中之重,让人不得不深思,编程思想经过了一代代发展,为什么还在围绕ER,在远古时代,没有OO,没有DDD,但为什么延续至今的伟大软件也比比皆是 带着这个问题,需要回头看看,结构化编程为什么不行?面向对象因何而起,到底解决了什么问题? 《架构整洁之道》也特别介绍了面向对象编程,面向对象究竟是什么,大多从三大特性:封装、继承、抽象说起,但其实这三种特性并不是面向对象语言特有
148 0