Python---面向对象
Python从入门到高手(内部资源-配学习资料)_哔哩哔哩_bilibili# 类中方法:动作# 类首字母大写# 种类:普通方法 类方法 静态方法 魔术方法'''普通方法格式:def 方法名(self,[,参数,参数])pass'''class Phone:brand = 'xiaomi'price = 4999type = 'mate 80'# Phone类里面方法:calldef call(s
# 类中方法:动作 # 类首字母大写 # 种类:普通方法 类方法 静态方法 魔术方法 ''' 普通方法格式: def 方法名(self,[,参数,参数]) pass ''' class Phone: brand = 'xiaomi' price = 4999 type = 'mate 80' # Phone类里面方法:call def call(self): #创建对象后所分配的内存地址 print('self------>', self) print('正在访问通讯录:') for person in self.address_book: print(person.items()) print('正在打电话......') print('留言:',self.note) phone1 = Phone() # 产生自身的空间 phone1.note = '我是phone1的note' phone1.address_book=[{'159008867454':'于鹏'},{'159008860000':'晓伟'}] # 手机号在前面避免重名 print(phone1, '------1------') # print(phone.brand) phone1.call() # call(phone1)--->self.note print('*' * 30) phone2 = Phone() # 产生自身的空间 phone2.note = '我是phone2的note' print(phone2, '------2------') phone2.call() #call(phone2)--->self.note
------------------------------------------------------------------------------------------
# 函数 和 类里面定义的:方法 def func(names): for name in names: print(name) name_list = ['aa', 'bb', 'cc'] func(name_list) class Phone: # 魔术方法之一:__名字__() 称作魔术方法 def __init__(self): # init初始的,初始化,系统默认执行,模版的统一化 # print('------init------') self.brand = 'xiaomi' # 动态的给self空间里添加两个属性:brand,price self.price = '4999' def call(self): # self是不断发生改变的 print('------>call') print('价格', self.price) # 不能保证每个self中都存在price # p = Phone() # p.price = 1000 # p.call() # p.call() p对象 # # p1 = Phone() # p1.call() p = Phone() ''' 1.找有没有一块空间是Phone 2.利用Phone类,向内存申请一块Phone一样的空间 3.去Phone中找有没有__init__. 如果没有则执行将开辟内存给对象名:p 4.如果有__init__,则会进入__init__方法执行里面的动作 将内存地址赋值给对象p '''
--------------------------------------------------------------------------------
# class Person: # name = '张三' # # def __init__(self): # self.name = 'zhangsan' # self.age = 18 # # def eat(self): # print('{}正在吃红烧肉!'.format(self.name)) # # def run(self): # print('{},今年{}岁,正在跑步'.format(self.name, self.age)) # # # p = Person() # p.name = '李四' # p.eat() # p.run() # # p1 = Person() # p1.name = '王五' # p1.eat() # p1.run() '''''''''''''''''' class Person: name = '张三' def __init__(self, name, age): self.name = name self.age = age def eat(self): print('{}正在吃红烧肉!'.format(self.name)) def run(self): print('{},今年{}岁,正在跑步'.format(self.name, self.age)) p = Person('李四', 20) p.eat() p.run() p1 = Person('王五', 22) p1.eat() p1.run()
-------------------------------------------------------------------------------------------------------
# 类方法 ''' 特点: 1.定义需要依赖装饰器@classmethod 2.类方法中参数不是一个对象,而是类 3.类方法中值可以使用类属性 类方法还没创建的时候就可以调用 4.类方法中不能调用普通方法 类方法作用: 因为只能访问类属性和类方法,所以可以在对象创建之前,如果需要完成一些动作(功能) ''' class Dog: def __init__(self, nickname): self.nickname = nickname def run(self): print('{}在院子里跑来跑去!'.format(self.nickname)) def eat(self): print('吃饭。。。') self.run() # 类方法中的调用,需要通过self.方法名() @classmethod def test(cls): # cls class cls--->Dog类 print(cls) # print(cls.nickname) #问题 d = Dog('大黄') d.run() d.test()
--------------------------------------------------------------------------------
# 补充类方法 ''' 不依赖于类对象 静态方法:很类似类方法 1.需要装饰器@staticmethod 2.静态方法是无需传递参数(cls,self) 3.只能访问类的属性和方法,对象的是无法访问的 4.加载时机同类方法 总结: 类方法 静态方法 不同: 1.装饰器不同 2.类方法有参数的,静态方法没有参数 相同: 1.只能访问类的属性和方法,对象的是无法访问的 2.都可以通过类名调用访问 3.都可以在创建对象之前使用,因为是不依赖于对象 普通方法与两者区别: 不同: 1.没有装饰器 2.普通方法永远是要依赖对象,每个普通方法都有一个self 3.只有创建了对象才可以调用普通方法,否则无法调用 ''' class Person: __age = 18 def __init__(self, name): self.name = name def show(self): print('------>', Person.age) @classmethod def update_age(cls): cls.__age = 20 print('------>类方法') @classmethod def show_age(cls): print('修改后的年龄是:', cls.__age) @staticmethod def test(): print('------>静态方法') print(Person.__age) Person.update_age() Person.show_age()
--------------------------------------------------------------------------------
# 魔术方法
# __init__:
# 触发时机:初始化对象时触发(不是实例触发,但是和实例化在一个操作中)
参数至少有一个self
'''
__new__:实例化的魔术方法
触发时机:在实例化时触发
把底层自带的魔术方法覆盖,比如使得__init__无法正常使用
class Person:
def __init__(self, name):
self.name = name
def __new__(cls, *args, **kwargs):
# __new__向内存要空间---地址 print('------>new')
p = Person('jack')
print(p)
运行错误
__call__:对象调用方法
触发时机:将对象当成函数使用的时候,会默认调用此函数中的内容
__del__:
'''
class Person:
def __init__(self, name):
self.name = name
def __new__(cls, *args, **kwargs): # __new__向内存要空间---地址
print('------>new')
position = object.__new__(cls) # 申请内存分配空间
return position # 地址
def __call__(self, *args, **kwargs):
print('------->call')
p = Person('jack')
print(p)
--------------------------------------------------------------------------------
import sys ''' __del__: 1.对象赋值 p=Person() p1=p 说明:p和p1共同指向同一个地址 2.删除地址的引用 del p1 删除p1对地址的引用 3.查看对地址的引用次数 import sys sys.getrefcount(p) 4.当一块空间没有任何引用,默认执行__del__ python底层自带 垃圾回收机制 sys.getrefcount(p)为0 ''' class Person: def __init__(self, name): self.name = name def __del__(self): print('------del------') p = Person('jack') p1 = p p2 = p print(p1.name) print(p2.name) p1.name = 'tom' print(p.name * 5) print(p2.name) del p2 print('删除p2后打印', p.name) del p1 print('删除p1后打印', p.name) del p print('删除p后打印', p.name) # print(sys.getrefcount(p)) # 查找引用个数 # 对象复制 n = 5 n1 = n
---------------------------------------------------------------------------------------
# __str__: # 魔术方法与普通方法的区别:魔术方法在特定时刻自动触发 # 注意:一定要在__str__方法中添加return,return后面内容就是打印对象看到的内容 class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return '姓名是' + self.name + ',年龄' + str(self.age) p = Person('tom', 18) print(p) # 单纯打印对象名称,出来的是一个地址。地址对于开发者来说没有太大意义 # 如果想在答应对象名的时候能够给开发者更多的一些信息量 p1 = Person('jack', 20) print(p) ''' 总结:魔术方法 重点: __init__(构造方法,创建完空间后调用的第一个方法) __str__ 了解: __new__ 作用 开辟空间 __del__ 作用 没有指针引用的时候会调用。99%都不需要重写 __call__作用 想不想将对象当成函数用 大总结: 方法: 普通方法(重点) def 方法名(self,[参数]): 方法体 对象.方法() 方法之间的调用: class A: def a(self): pass def b(self): #调用a方法 self.a() 类方法 @classmethod def 方法名cls(cls,[参数]): pass 类名.方法名 对象.方法名 静态方法 @staticmethod def 方法名([参数]): pass 类名.方法名() 对象.方法名() 魔术方法 自动执行方法 print(p)--->str '''

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
所有评论(0)