首页 > 代码库 > Python修炼10------面向对象

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------面向对象