Python补充笔记4-面向对象

这篇具有很好参考价值的文章主要介绍了Python补充笔记4-面向对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、编程思想​

二、类与对象​

三、类的创建​

四、对象的创建​

五、类属性、类方法、静态方法​

六、动态绑定属性和方法​

七、知识点总结

八、面向对象的三大特征

1.封装 

2.继承​

3.多态

九、方法重写

十、object类 

十一、特殊方法和特殊属性

1.dict/len/add​

2.new / init

​十二、类的赋值与浅拷贝

十三、知识点总结​

一、编程思想

二、类与对象 

python中一切皆对象

三、类的创建

类的名称由一个或多个单词组成,每个单词的首字母大写,其余小写

类是对象,开辟内存空间

这里self当然可以换为其他单词 ,但是必须存在这样一个单词,python默认就是self

在类里定义的函数称为实例方法,在类之外定义的函数称为函数。

四、对象的创建

class Student:# Student称为类的名称
    native_pace='吉林'#直接写在类里面的变量,称为类属性
    def __init__(self,name,age):#name,age是实例属性
        self.name=name
        self.age=age
    #实例方法
    def eat(self):
        print('学生在吃饭')
 
    #静态方法,使用@staticmethod
    @staticmethod
    def method():
        print('静态方法中不允许写self')
 
    #类方法,@classmethod
    @classmethod
    def cm(cls):
        print('类方法中传cls')
#在类之外定义的称为函数,在类之内定义的称为方法
 
stu1=Student('张三',20)
stu1.eat()   #对象名.方法名
stu1.cm()
stu1.method()
print(stu1.name,stu1.age)
# 学生在吃饭
# 类方法中传cls
# 静态方法中不允许写self
# 张三 20
 
Student.eat(stu1)  #和上面的调用方法功能一样
# 学生在吃饭

五、类属性、类方法、静态方法

print(Student.native_pace)#吉林
stu1=Student('张三',20)
stu2=Student('李四',30)
print(stu1.native_pace)
print(stu2.native_pace)
# 吉林
# 吉林
Student.native_pace='天津'
print(stu1.native_pace)
print(stu2.native_pace)
# 天津
# 天津
 
Student.cm()
Student.method()
# 类方法中传cls
# 静态方法中不允许写self

六、动态绑定属性和方法

class Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def eat(self):
        print(self.name+'在吃饭')
 
stu1=Student('张三',30)
stu2=Student('李四',40)
 
stu2.gender='男'  #动态绑定stu2属性
print(stu1.name,stu1.age)
print(stu2.name,stu2.age,stu2.gender)
# 张三 30
# 李四 40 男
 
def show():
    print('定义在类之外,函数')
stu1.show=show    #动态绑定stu1的方法
stu1.show()

七、知识点总结

Python补充笔记4-面向对象,Python,笔记,python

八、面向对象的三大特征

1.封装 

Python补充笔记4-面向对象,Python,笔记,python

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

    def show(self): #可让外部对象通过调用成员方法来进行访问
        print(self.name, self.__age)


stu = Student('张三', 20)
stu.show()
# 在类的外部使用name和age
print(stu.name)
# print(stu.__age)  print(stu.__age)AttributeError: 'Student' object has no attribute 'name'
print(dir(stu))
print(stu._Student__age)  # 在类的外部强制访问,虽然说私有属性外部没法访问,但是也不是不能访问,只是自觉不使用进行访问
# 20

2.继承

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def info(self):
        print('姓名:{0},年龄:{1}'.format(self.name,self.age))
#定义子类
class Student(Person):
    def __init__(self,name,age,score):
        super().__init__(name,age)
        self.score=score
#测试
stu=Student('Jack',20,'1001')
stu.info()
# 姓名:Jack,年龄:20

3.多态

Python补充笔记4-面向对象,Python,笔记,python

 

九、方法重写

Python补充笔记4-面向对象,Python,笔记,python

 java就是静态语言,python是动态语言,静态语言实现多态必须明确继承关系,而动态语言只关心你是否具有这个方法Python补充笔记4-面向对象,Python,笔记,python

 

class Animal(object):
    def eat(self):
        print('动物吃')

class Dog(Animal):
    def eat(self):   #重写父类Animal方法
        print('狗吃')


class Cat(Animal):
    def eat(self):   #重写父类Animal方法
        print('猫吃')


class Person:
    def eat(self):   #重写父类object方法
        print('人吃')


def fun(a):#定义一个函数,来调用eat方法,因此只要类中有eat方法,就可以被调用
    a.eat()


fun(Dog())
fun(Cat())
fun(Animal())
fun(Person())
# 狗吃
# 猫吃
# 人吃
class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def info(self):
        print(self.name, self.age)


class Student(Person):
    def __init__(self, name, age, stu_no):
        super().__init__(name, age)
        self.stu_no = stu_no

    # 会发现父类中也有info方法,但是子类Student在调用时只会输出name,age,
    # 无法输出子类的stu_no,因此想着继承父类的属性,但是也要有子类的属性,于是重写info方法
    def info(self):
        super().info()  #这个是为了继承父类的name,age的属性,不写就继承不了
        print(self.stu_no)


class Teacher(Person):
    def __init__(self, name, age, teachofyear):
        super().__init__(name, age)
        self.teachofyear = teachofyear


stu = Student('张三', 20, '10010')
stu.info()
# 张三 20
# 10010

十、object类 

Python补充笔记4-面向对象,Python,笔记,python

class Student:  #没写继承,默认继承object类
    pass
stu=Student()
print(dir(stu))

Python补充笔记4-面向对象,Python,笔记,python

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):#相当于重写了__str__方法,因为继承的object中也有这个方法
        return '我的名字是{0},今年{1}岁了'.format(self.name, self.age)


stu = Student('张三', 20)
print(dir(stu))
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__',
#  '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__',
#  '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
#  '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
print(stu)  #默认会调用__str__这样的方法,
# <__main__.Student object at 0x0000016E05C38400>
# 我的名字是张三,今年20岁了 #默认调用__str__()这样的方法,重写了

十一、特殊方法和特殊属性

1.dict/len/add

a = 20
b = 100
c = a + b
d = a.__add__(b)

print(c)  # 120
print(d)  # 120 #从此可以看出,ab相加的原理就是调用了本身的__add__方法,如果本身没有add方法,d也不会有结果,如下面的例子


class Student:
    def __init__(self, name):
        self.name = name

    def __add__(self, other):
        return self.name + other.name

    def __len__(self):
        return len(self.name)


stu1 = Student('张三')
stu2 = Student('李四')

# print(stu1+stu2)TypeError: unsupported operand type(s) for +: 'Student' and 'Student'
print(stu1 + stu2)  # 张三李四
# 实现了两个对象的加法运算,在类中编写了add特殊的方法,没有add方法,这两个就不能相加
s=stu1.__add__(stu2) #当然这样写也必须是在类中有add方法,如果把Student类中的add方法去除,一样不对
print(s)

list=[1,2,3,4]
print(len(list))
print(list.__len__())#可以发现列表自带len的内置方法

print(len(stu1)) 
# TypeError: object of type 'Student' has no len()  因为类中没写len方法,所以报错
# 2   在类中编写了len特殊的方法,return len(self.name)

2.new / init

class Person(object):
    def __new__(cls, *args, **kwargs): #创建对象
        print('__new__被调用执行了,cls的id值为{0}'.format(id(cls)))     #4864
        obj=super().__new__(cls)
        print('创建的对象的id为:{0}'.format(id(obj)))                  #7264
        return obj
    def __init__(self,name,age):  #对创建的对象初始化
        self.name=name
        self.age=age
        print(' _init__被调用了,self的id为:{0}'.format(id(self)))     #7264
 
print('object id:{0}'.format(id(object)))                             #4048
print('Person id:{0}'.format(id(Person)))                             #4864
p1=Person('三',20)
print('p1 id:{0}'.format(id(p1)))                                     #7264
 
# object id:140709592514048
# Person id:2701662344864
# __new__被调用执行了,cls的id值为2701662344864
# 创建的对象的id为:2701663637264
#  _init__被调用了,self的id为:2701663637264
# p1 id:2701663637264

十二、类的赋值与浅拷贝

Python补充笔记4-面向对象,Python,笔记,python 文章来源地址https://www.toymoban.com/news/detail-602853.html

#类对象的赋值操作,形成两个变量,实际上还是指向同一个对象
cpu1=CPU()
cpu2=cpu1
print(cpu1)
print(cpu2)
# <__main__.CPU object at 0x0000021A25626FD0>
# <__main__.CPU object at 0x0000021A25626FD0>
 
disk=Disk()
computer=Computer(cpu1,disk)
import copy
computer2=copy.copy(computer) #浅拷贝,对象包含的子对象内容不拷贝
computer3=copy.deepcopy(computer) #深拷贝,递归拷贝对象中包含的子对象
print(computer,computer.cpu,computer.disk)
print(computer2,computer2.cpu,computer2.disk)
print(computer3,computer3.cpu,computer3.disk)
# <__main__.Computer object at 0x000002281D258F70> <__main__.CPU object at 0x000002281D258FD0> <__main__.Disk object at 0x000002281D258FA0>
# <__main__.Computer object at 0x000002281D258820> <__main__.CPU object at 0x000002281D258FD0> <__main__.Disk object at 0x000002281D258FA0>
# <__main__.Computer object at 0x000002281D258730> <__main__.CPU object at 0x000002281D258430> <__main__.Disk object at 0x000002281D258460>

十三、知识点总结

到了这里,关于Python补充笔记4-面向对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python 面向对象 对象

    类 构造函数 魔术方法 python中类中有内置方法,这些内置方法,成为魔术方法 魔术方法如下[常用]: init 构造函数 自动执行 str 字符串方法 lt 小于、大于符号比较 le 小于等于、大于等于符号比较 eq ==等于符号 面向对象的特点 封装 多态 继承 ##python中私有属性、私有方法,,

    2024年02月09日
    浏览(56)
  • Python基础之面向对象:8、面向对象之元类

    目录 面向对象之元类 一、什么是元类 二、元类推导流程 三、创建类的方式 方式一: 方式二: 四、元类定制类的产生行为 五、元类定制对象的产生行为 六、元类之双下new Python中一切皆为对象,对象是有类实例化生成; 类也是对象(类对象),生成类对象的类可称之为元

    2024年01月20日
    浏览(56)
  • 【Python学习】Python学习20- 面向对象(2)

    目录 文章所属专区 Python学习 本章节主要说明Python的面向对象的处理。 通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类 语法: 1、如果在子类中需要父类的构造方法就需要显式的调用父类的构造方法,或者不重写父类的构造方法。详细说明可查看:

    2024年01月18日
    浏览(59)
  • 【Python学习】Python学习20- 面向对象(1)

    目录 文章所属专区 Python学习 本章节主要说明Python的面向对象的处理。Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方

    2024年01月16日
    浏览(57)
  • Python 面向对象(类)

    目录 面向对象理念 面向对象三大特性  定义类 格式 创建对象(实例化一个对象) 创建方法 实例方法 类方法  静态方法 self含义 对象属性 添加获取对象属性 ​编辑 类里面获取对象属性 继承 单继承 多继承 多态 面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的

    2024年01月19日
    浏览(51)
  • 【Python学习】—面向对象(九)

    类中不仅可以定义属性来记录数据,也可以定义函数,用来记录行为,类中定义的属性(变量)我们称之成员变量,类中定义的行为(函数),我们称之为成员方法。 表示对象本身的意思 只有通过self,成员方法才能访问类的成员变量 self出现在形参列表中,但是不占用参数

    2024年02月08日
    浏览(46)
  • python 面向对象之继承

    前面我们已经学习了 python 面向对象的类和对象,那么今天我将为大家分享面向对象的三大特性之一:继承。 继承具有以下特性: 代码重用:继承允许我们创建一个新的类,并从一个或多个现有的类中继承属性和方法。这使得我们可以避免重复编写相同的代码,提高代码的重

    2024年02月15日
    浏览(52)
  • Python面向对象编程

    本文带领大家过一遍菜鸟学Python的面向对象的部分 类(Class):  用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 类变量: 类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通

    2023年04月27日
    浏览(46)
  • python 面向对象编程(2)

    前面我们介绍了 python 类和对象以及继承、私有权限,那么今天我们将来介绍 python面向对象 剩下的两大特性封装、多态,以及如何访问、修改类属性、类方法和静态方法的介绍。🚗🚗🚗 Python中的封装是一种面向对象编程的概念,它将数据和操作这些数据的方法封装到一个

    2024年02月16日
    浏览(56)
  • Python面向对象(全套)

    编程思想分为面向对象和面向语言 什么是面向过程? 面向过程即以事物发生过程为主要目标进行编程(什么正在发生) 什么是面向对象? 面向对象即把一件事物为对象进行编程,每个对象都有属性和方法。 例如:人可以作为对象,属性有姓名、年龄、身高...方法有走、跑

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包