python面向对象day02

私有成员

什么是私有成员:
    私有成员:如果在成员(属性和方法)名前面加了2个下划线'__',则表明该成员是私有成成员,否则为公有
私有成员作用:
    私有成员:私有成员只能在类内被访问到

	类内:写在本类内部的代码
	类外:写在本类外部的代码
好处:
	1.更好的保护属性安全,即不能随意修改
	2.面向对象编程的思想关注的是对象功能完成的结果,不关注内部实现和过程。设计私有成员可以提高封装性,隐藏内	部实现,仅开放用户需要的功能.
语法:
    class 类名:
    def __init__(self):
        self.__属性名称 = "属性值"
	def __方法名称(self):
    	#方法体
例子:
   # 创建一个学生类
class Student:
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    # 展示个人信息
    def show(self):
        print(f"我的名字是{self.name},今年{self.__age}岁")


# 实例化对象
stu = Student(name="小三", age=20)
stu.show()
# 把其中一个属性修改成私有成员进行访问
# print(stu.__age) # 私有成员不能在本类外部访问
# 查看对象上所有属性
print(dir(stu))

__del__方法

1.调用时机:对象空间 被销毁时,自动调用 对象上的__del__方法
class 类名(object):
    def __del__(self):
        # 对象被销毁的时候自动调用执行, 清理对象占用的资源 或者 明确对象的销毁时机
        pass
2.对象销毁的时机
	a. 脚本执行结束, python占用的所有内存资源都被释放, 包括对象空间(python垃圾回收机制)
    b. 对象的没有被任何变量引用的时候, 对象被当做垃圾回收了
    	手动清空对象空间:
            	del 对象变量
                对象变量 = None
3.例子:
    # 定义一个学生类
class Student:
    def __init__(self):
        print("创建对象成功")

    def __del__(self):
        print("对象被销毁")


# 创建对象
stu1 = Student()
stu2 = stu1
# del stu1
# del stu2

# 重新赋值为None也会被释放
stu1 = None
stu2 = None
print("end.......")

继承

1.概念:子类继承父类,直接使用父类上的成员(属性和方法)
语法:
    class 子类名(父类名):# 默认继承 object
        # 子类新增成员
        pass
注意:私有成员不能被继承
2.继承的特征:
    单继承
    多层继承
    多继承
    重写
    	概念:子类中定义与父类相同名字的成员,即子类重写父类成员
            属性重写
            方法重写
         方法重写:
            当父类上的方法不满足子类上的需要,但子类不得不使用该方法,则在子类中重写父类方法
例子:
    # 创建一个父类
class Father(object):
    def __init__(self, name, age, money):
        self.name = name
        self.age = age
        self.money = money
        # 私有化身高
        self.__height = 178

    def show(self):
        print(f"{self.name}今年{self.age},有财富{self.money},身高{self.__height}")


# 定义一个子类,继承父类
class Son(Father):
    def showHeight(self):
        print(self.__height)  # 子类不能使用父类上的私有成员


# 创建一个子类对象
son = Son(name="大头儿子", age=10, money=50)
print(son.name)  # 继承属性
son.show()  # 继承方法
# 私有化没法继承
# son.showHeight()
多态(了解):继承,重写,相同的方法实现的功能不同,这就是对态
3.查看对象信息:
    type(对象):查看对象类名(类型)
    dir(对象):查看对象上的所有属性(属性和方法都称为属性)
    isinstance(对象,类名):判断对象是否是指定类的实例(对象)

类属性和实例属性

1.实例属性:对象上的属性
    绑定方式:
        动态:类名.属性名=值
        在类中绑定:
            class 类名(object):
                类属性名=值
    访问:
        类名.类属性名
    作用:将所有对象共享的属性设置为类属性,所有对象都能使用,从而节约内存空间
例子:
    class Student(object):
    	# 绑定类属性
    	class_name = "软件测试精英班"


# print(dir(Student)) # 类也是一个对象
# 动态添加属性
# Student.class_name = "软件测试精英班"


# 在类中绑定属性
print(Student.class_name)  # 一般直接通过 类名.属性名  进行访问

# 创建对象访问类属性
stu = Student()
print(stu.class_name)

类方法和静态方法

class 类名(object):
    # 实例方法
    def 方法名(self,[形参]):
        pass
    
    # 类方法
    @classmethod
    def 类方法名(cls,[形参]):
        # cls == class 调用的那个类
        pass
    
    # 静态方法
    @staticmethod
    def 静态方法名([形参]):
        pass
    
# 调用
类名.类方法名()
类名.静态方法名()
发布了20 篇原创文章 · 获赞 0 · 访问量 207

猜你喜欢

转载自blog.csdn.net/weixin_46054381/article/details/103840044