11-面向对象

2023-04-08  本文已影响0人  飘摇的水草
概念

面向过程和面向对象是两种编程思想,编程思想是对同一个问题,解决问题的套路方式。

类和对象

对象

类的构成

类由三部分组成:

  1. 类名
  2. 属性:特性,变量
  3. 方法:行为,函数
类的定义

语法规则如下:

class 类名(object):
类中的代码

定义类的三种方式:

# 新式类:直接或者间接继承 object 的类,在Python3中,所有的类默认继承object类,
# 在Python 2中,默认是不继承 object 的
# 旧式类(经典类)
# PEP8规则,类定义的前后需要添加两个空行
class Dog(object):
    pass

class Dog1():
    pass

class Dog2:
    pass
创建对象
# 新式类:直接或者间接继承 object 的类,在Python3中,所有的类默认继承object类,
# 在Python 2中,默认是不继承 object 的
# 旧式类(经典类)
# PEP8规则,类定义的前后需要添加两个空行

class Dog(object):

    # 在类中定义的函数称为方法
    def play(self):
        print ("拆家中")
    pass

dog = Dog();
print id(dog)

dog.play()
在外部给对象添加属性

即使类内部没有定义属性名,依然可以通过下面的方式来给对象添加属性:

dog = Dog()

dog.name = "HeiZi"
dog.age = 4
在类内部获取属性值

在类内部通过 self 来获取属性值

init用法
class Dog(object):

    def __init__(self,name):
        self.name = name
        print ("__init__方法,我被调用了")

如果 init 函数里有形参,那么在创建对象的时候传递参数,如下所示:

dog1 = Dog(name = "dkdk")
str方法

调用时机:

  1. print(对象) 会自动调用 __str__ 方法,打印输出的结果是 __str__ 方法的返回值
  2. str(对象) 类型转换,将自定义对象转换为字符串的时候,会自动调用

应用:

  1. 打印对象的时候,输出一些属性信息
  2. 需要将对象转换为字符串类型的时候

注意点:方法必须返回一个字符串,只有 self 一个参数

class Dog(object):

    def __init__(self,name):
        self.name = name
        print ("__init__方法,我被调用了")

    def __str__(self):
        return "小狗的名字是{self.name}"

如果在类中没有实现 __str__ 方法,当用 print 方法打印对象的时候,默认输出的是引用地址,如果实现了则输出 __str__ 方法里 return 的字符串

del 方法

其他语言中称为析构函数

调用时机:

  1. 对象在内存中被销毁的时候会自动调用 __del__ 方法
  2. 使用 del 变量 将这个对象的引用计数变为0时也会自动调用

应用场景:

  1. 对象被删除销毁的时候,要书写的代码可以写在 __del__ 中,一般很少使用
class Cat(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __del__(self):
        print "del函数被调用了"

cat = Cat(age = 20,name = "测试")

del cat
查看引用计数
import sys

# 显示的会比实际的多一个
print sys.getrefcount(dog)
repr方法

这个方法和 __str__ 很类似,也是返回字符串,__repr__ 是给用户看的

上一篇 下一篇

猜你喜欢

热点阅读