python面向对象全新知识掌握

私有成员

1. 概念: 私有成员 只能在 本类 内部使用
好处:
    1.保护私有属性不被随意修改
    2.提高封装性,将用户不需要使用的功能设置为私有, 用户只需要关心公有的. 
    
语法: 
    在成员名前面加 两个 下划线, 这样的成员就是私有成员
    
    self.__属性名 = 值
    def __方法名(self):
        pass

__del__方法

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

继承(重点)

1. 概念: 子类继承父类, 直接使用父类上的成员(属性和方法)
语法:
    class 子类名(父类名): # 默认继承 object
        # 子类新增的成员
        pass
    
注意: 私有成员不能被继承
2. 继承的特征
a. 单继承
b. 多层继承
c. 多继承(骡子 同时继承 马和驴)
d. 重写
	概念: 子类中定义了与父类相同名字的成员, 即子类重写父类成员
        属性重写
        方法重写
    方法重写:
        当父类上的方法不满足子类需要,但是子类不得不使用该方法,则在子类中重写父类方法.
        
        例如: 子类和父类 初始属性不同, 需要重写 __init__ 方法
    调用父类上的方法:
        super().父类方法名([实参])
        super(子类名,self).父类方法名([实参])

例如:
class Goods(object):
def init(self,name,price):
self.name = name
self.price = price

    class Phone(Goods):
    	def __init__(self,name,price,brand,size,color):
            #self.name = name
            #self.price = price
            super().__init__(name,price) # 调用父类上的方法
            self.brand = brand
            self.size = size
            self.color = color

 e. 多态(了解): 继承,重写, 相同的方法实现的功能不同, 这就是多态
3. 查看对象信息
type(对象) : 查看对象的类名(类型)
dir(对象) : 查看对象上的所有的属性(属性和方法都称为属性)
isinstance(对象,类名): 判断对象是否是指定类的实例(对象)

类属性和实例属性

1. 实例属性: 对象上的属性
	绑定方式:
        动态: 对象变量.属性名 = 值
        初始化方法中绑定: self.属性名 = 值
2. 类属性: 类上的属性
	绑定方式:
        动态: 类名.属性名 = 值
        在类中绑定:
            class 类名(object):
                类属性名 = 值
                
    访问:
        类名.类属性名
        
        
    作用: 将所有对象共享的属性设置为类属性, 所有的对象都能使用, 从而节约内存空间.

类方法和静态方法

class 类名(object):
    # 实例方法
    def 方法名(self,[形参]):
        pass
    
    # 类方法
    @classmethod
    def 类方法名(cls,[形参]):
        # cls == class 调用的那个类
        pass
    
    # 静态方法
    @staticmethod
    def 静态方法名([形参]):
        pass
    
#调用
类名.类方法名()
类名.静态方法名()


定义一个类:猫类

class Cat:
#初始化属性
def init(self,name,age,hobby):
self.name = name
self.age = age
self.__hobby = hobby#设定一个私有成员,在属性,方法前加俩下划线
print(f"他叫{self.name},今年{self.age}他喜欢{self.__hobby}")

cat = Cat(“327”,18,“吃肉”)
cat.init(“327”,18,“吃肉”)

创建一个类:

class Student:
#初始化一个方法,
def init(self):
print(“创建一个文件”)
def del(self):
print(“对象被销毁”)

#创建对象:语法: 对象变量 = 类名()
s = Student()
q = s
del s
del q #如果屏蔽del ,end将提前输出
print(“end…”)

创建一个父类,明确初始值object

class Father(object):
def init(self,name,age,money):
#初始化方法
self.name = name
self.age = age
self.money = money
#定义一个私有的属性
self.__hobby = “看电影”
def show(self):
print(f"他叫{self.name},今年{self.age}岁,他拥有{self.money}资产")
#子类 继承 父类,直接使用父类上面的成员
class Son(Father):
def showhobby(self):
print(self.__hobby)#子类不能使用父类私有成员
son = Son(“阿猫”,18,170000)
print(son.name)#继承的属性
son.show() #继承的方法
print(dir(son))
son.showhobby()

骡子继承马和驴

class Horse(object):
def run(self):
print(“跑的快”)
class Lv(object):
def tuo(self):
print(“驼的邦重”)

#骡子
class Luozi(Horse,Lv):
pass

#创建联骡子对象
lz = Luozi()
lz.run()
lz.tuo()

定义俩类

#商品类:属性,名字,价格
#手机类:属性,名字,价格,品牌,尺寸,颜色

#定义一个商品类
class Goods(object):
#定义一个初始化的函数
def init(self,name,age):
#初始化 属性值
self.name = name
self.age = age
print(“对象被创建”)
#创建一个手机类,继承父类Goods
class Phone(Goods):
def init(self,name,age,brand,size,color):
# self.name = name
# self.age = age
super().init(name,age) # 优化
self.brand = brand
self.size = size
self.color = color
print(“子类对象被创建”)

#创建子类对象
lizi = Phone(“梨子”,6000,“梨子手机”,5.7,“玫瑰金”)
print(f"{lizi.name}{lizi.age}{lizi.brand}{lizi.size}{lizi.color}")
print(lizi)

class Student(object):
#绑定类属性
class_name = “软件测试精英班”
print(dir(Student)) #说明类也是对象
#例如: Student类添加一个属性 班级名 对象.属性名 = 值
#动态添加
#Student.class.name = “软件测试精英班”
#在类中绑定类属性
print(Student.class_name)

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

案例:

class Student(object):
#类属性
class_name = “软件测试精英班”

#初始化方法
def __init__(self,name,age):
    self.name = name
    self.age = age

#展示个人信息:实例方法
def show(self):
    print(f"{self.name},今年{self.age}.在{Student.class_name}学习!")

    #展示班级
@classmethod       #.必须使用装饰器@classmethod来标识方法为类方法
def showClass(cls):
    #cls 类自己:类名.属性名
    #print(id(cls))
    print(cls.class_name)

#展示时间
@classmethod
def showTime(cls):
    import datetime
    print(datetime.datetime.now())
创建对象

#stu = Student(“张飞”,28)
#stu.show()
#print(id(Student))

#调用类方法
Student.showClass()

#调用静态方法
Student.showTime()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值