编程语言
首页 > 编程语言> > python_面向对象进价

python_面向对象进价

作者:互联网

1.对象属性的增删改查

  1. 对象.属性 - 获取对象指定属性的值,如果属性不存在报错
  2. getattr(对象, 属性名) - 获取对象指定属性的值,如果属性不存在报错
  3. getattr(对象, 属性名, 默认值) - 获取对象指定属性的值,如果属性不存在返回默认值
  1. 对象.属性 = 值 - 当属性存在的时候修改属性的值,当属性不存在的时候添加属性
  2. setattr(对象, 属性名, 值) - 当属性存在的时候修改属性的值,当属性不存在的时候添加属性

2.内置属性

3.运算符重载

4.继承

+继承
继承就是让子类直接拥有父类的属性和方法。
子类 - 继承者
父类 - 被继承者,又叫超类
2. 继承的语法
class 类名(父类):
说明文档
类的内容
class 类名(父类1, 父类2,…):
说明文档
类的内容
注意:如果定义类的时候没有写继承关系,那么这个类默认继承基类object
class 类名: == class 类名 (object):
3.添加新属性和方法
1)添加方法和添加类属性
直接在子类中定义新的类属性和方法
2)添加对象属性
代码如下:

class Person:
    num = 61

    def __init__(self):
        self.name = '张三'
        self.age = 30
        self.gender = '男'

    def eat(self, food):
        print(f'在吃{food}')

    @staticmethod
    def func1():
        print('静态方法')
        
class Student(Person):
    x = '学生'

    def __init__(self):
        # 调用当前类的父类的__init__方法
        super().__init__()
        self.study_id = '0001'
        self.subject = 'Python'

    def study(self):
        print('好好学习,天天向上!')

    @classmethod
    def func2(cls):
        print('学生的类方法')

stu = Student()
print(stu.name, stu.age, stu.gender)
stu.eat('包子')

print(Student.num)
Student.func1()

print(Student.x)
stu.study()
Student.func2()
print(stu.study_id, stu.subject)

class A:
    def __init__(self, x, y):
        self.x = x
        self.y = y

class B(A):
    def __init__(self, m, n, x=10, y=20):
        super().__init__(x, y)
        self.m = m
        self.n = n

a = A(200, 300)

b = B(1, 2)
print(b.x, b.y)
# b.x = 3
# b.y = 4

5.继承细节

6.拷贝

  1. 拷贝
    1)直接赋值
    直接将变量中的地址赋值给另外一个变量,赋值后两个变量指向同一块内存区域,并且相互影响
    2)浅拷贝
    列表切片、列表.copy()、字典.copy()等都是浅拷贝、copy()
    复制原数据产生一个新的数据,将新的数据的地址返回。如果原数据中有子对象(有可变数据),不会复制子对象
    3)深拷贝
    deepcopy
    复制原数据产生一个新的数据,将新的数据的地址返回。如果原数据中有子对象,子对象也会被复制
    2.内存管理
    1)内存的申请
    定义变量保存数据的时候系统会自动申请。如果定义变量保存的时候可变数据,每次都会申请新的内存,如果是不可变的数据,会检查这个数据
    是否已经保存过,如果已经存储就不会再重新申请内存。
    2)释放
    如果一个数据的引用计数(引用的个数)为0,那么这个数据就会被自动释放。
    引用:保存数据地址的对象就是这个数据的引用
    3.代码如下:
class Dog:
    def __init__(self, name, gender='公'):
        self.name = name
        self.gender = gender

    def __repr__(self):
        return str(self.__dict__)

class Person:
    def __init__(self, name, age=18, dog=None):
        self.name = name
        self.age = age
        self.dog = dog

    def __repr__(self):
        return str(self.__dict__)

p1 = Person('小明', dog=Dog('财财'))
p2 = p1
p3 = copy(p1)
p4 = deepcopy(p1)

print(f'p1:{p1}, id:{id(p1)}')
print(f'p2:{p2}, id:{id(p2)}')
print(f'p3:{p3}, id:{id(p3)}')
print(f'p4:{p4}, id:{id(p4)}')
print('-------------------------------------------------')
p1.name = '小花'
p1.dog.name = '大黄'
print(f'p1:{p1}, id:{id(p1)}')
print(f'p2:{p2}, id:{id(p2)}')
print(f'p3:{p3}, id:{id(p3)}')
print(f'p4:{p4}, id:{id(p4)}')

标签:__,stu1,进价,python,self,面向对象,print,def,属性
来源: https://blog.csdn.net/weixin_47311863/article/details/119392818