Python修炼10------面向对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python修炼10------面向对象相关的知识,希望对你有一定的参考价值。
面向对象-----类
类:类是一种数据结构,就好比一个模型,该模型用来表述一类事物(事物即数据和动作的结合体),用它来生产真实的物体(实例)。
对象:什么叫对象:睁开眼,你看到的一切的事物都是一个个的对象,你可以把对象理解为一个具体的事物(事物即数据和动作的结合体)
类与对象的关系:对象都是由类产生的,上帝造人,上帝首先有一个造人的模板,这个模板即人的类,然后上帝根据类的定义来生产一个个的人
#class 的创建 """ class 类名: " 数据属性" "def 函数属性" """ # 注意:类和对象均用点来访问自己的属性 # class Chinese: # dang="蛋蛋蛋" # def wugong(self): # print("使出降龙十八掌") # print(Chinese.__dict__) #把Chinese 类 全部属性拿到封装到字典 # print(Chinese.__dict__["dang"]) #通过key执行方法 # Chinese.__dict__["wugong"](1) # {‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Chinese‘ objects>, ‘dang‘: ‘蛋蛋蛋‘, ‘wugong‘: <function Chinese.wugong at 0x0000007DD1850268>, ‘__module__‘: ‘__main__‘, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Chinese‘ objects>, ‘__doc__‘: None} # # 使出降龙十八掌 # print(dir(Chinese)) # # class chinese: # "我是个热爱祖国" # country="China" # def __init__(self,name,sex,age): # self.mingzi=name # self.sex=sex # self.age=age # def gongfu(self): # print("%s使出降龙十八掌"%self.mingzi) # def zhaoji(self): # print("%s啪啪啪了一个妹子"%self.mingzi) # # # d1=chinese("chenglonog","men",22) #相当于执行类chinese下的__init__ # print(d1) #<__main__.chinese object at 0x0000008758E03240> # print(d1.__dict__) # d1的{‘age‘: 22, ‘sex‘: ‘men‘, ‘mingzi‘: ‘chenglonog‘} # d1.gongfu() #先d1找gongfu 找不到 去chinese 中找 # chenglonog使出降龙十八掌 # 2.类的属性 # 查看类属性 # print(chinese.country) #China # 修改类的属性 # chinese.country="Japan" # print(chinese.country) #Japan #删除类的属性 # del chinese.country # print(chinese.country) #AttributeError: type object ‘chinese‘ has no attribute ‘countr #增加 # chinese.yangjing="黑色" # print(chinese.yangjing) #黑色 #函数属性 |||||函数的增删改查和数据类型相通 # 查看函数属性 # print(chinese.gongfu.__dict__) #增加函数属性 # def say_word(self,word): # print("%s讲%s"%(self.mingzi,word)) # chinese.say_word=say_word #创建属性函数sya_word |||必须在顶头先定义函数 否自不能创建 # d1.say_word("鸟语") #chenglonog讲鸟语 #修改函数属性 # chinese.zhaoji=zhaole 错误 #NameError: name ‘zhaole‘ is not defined # def zhao(self): # print("%s啪啪啪了一个妹子"%self.mingzi) # chinese.zhaoji=zhao # print(chinese.__dict__) #修改实例属性 ||||只能增加数据属性 也能增加函数属性,但是调用不会给传入值self 不建议增加函数属性 # class chinese: # "我是个热爱祖国" # country="China" # def __init__(self,name,sex,age): # self.mingzi=name # self.sex=sex # self.age=age # def gongfu(self): # print("%s使出降龙十八掌"%self.mingzi) # def zhaoji(self): # print("%s啪啪啪了一个妹子"%self.mingzi) # # # d1=chinese("chenglonog","men",22) #相当于执行类chinese下的__init__ # 查看 # print(d1.__dict__) #{‘mingzi‘: ‘chenglonog‘, ‘sex‘: ‘men‘, ‘age‘: 22} # # 增加 # d1.yanjing="褐色" # print(d1.yanjing) #褐色 # 修改 # d1.yanjing="蓝色" # print(d1.yanjing) #蓝色 # 删除 # del d1.age # print(d1.__dict__) #{‘yanjing‘: ‘蓝色‘, ‘mingzi‘: ‘chenglonog‘, ‘sex‘: ‘men‘} # 类的作用域 # 1.#定义一个类,只当一个作用域去用 # class Mydata: # pass # x=10 # y=12 # Mydata.x=18 # Mydata.y=22 # print(x,y) #10 12 # print(Mydata.x,Mydata.y) #18 22 # country="China" # class Chinese: # country="中国" # globals() #声明全局变量 # country="日本" #如果输出变量的话为 日本 # def __init__(self,name): # self.name=name # print(country) #-------》就是个普通的变量 # d1=Chinese("成龙") #不加globals----》China |不是通过类去查找 直接去找类外面的变量 # print(d1.country) # 中国 # print(d1.__dict__) # print(d1.__dict__) class Mydata: country="zhongguo" l=[] def __init__(self,name): self.xingming=name def print1(self): print("劳拉") d1=Mydata("lao") d1.l=[1] #{‘l‘: [1], ‘xingming‘: ‘lao‘} 在d1属性字典中穿件 d1.l.append(4) #d1字典中有l[] 就在l 中追加没有的话 就会追加都Mydata 数据属性l[] 中 print(d1.__dict__)
------------------------------------------------------------------------------------------------------------------------
补充:
class a:
def b(self):
print("xxx")
@staticmethod #静态方法 下面函数通过 a.c()可调用 参数可有可无
def c():
print("oooo")
@classmethod #类方法 也可通过类调用
def d(sb):
print(sb)
print("xoxoxo")
@property #属性
def q(self):
print("ooooxxxx")
return 1
# a.c() #oooo
# a.d() #<class ‘__main__.a‘> xoxoxo
f=a()
#加上函数装饰器@property后
# print(f.q()) #会报错 TypeError: ‘NoneType‘ object is not callable
print(f.q)
>>>>>ooooxxxx
>>>>>1
以上是关于Python修炼10------面向对象的主要内容,如果未能解决你的问题,请参考以下文章