面向对象

Posted zypfzw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。

动作和属性的集合叫做对象。

现实世界中一切皆对象。

类:把一类事物的相同的属性和动作整合到一起就是类。类是一个抽象的概念。

对象:就是基于类而创建的一个具体的事物(具体存在的),对象也是特征和动作整合到一起的。

学校类:

特征:name.addr,type

动作:考试,招生,招老师,开除学生

python当中可以用面向对象编程,也可以面像过程和面向函数编程。

类和对象

技术分享图片

申明一个类的语法结构:

class 类名:

创建类的对象语法:

类名()

技术分享图片

类有自己的内置属性,类名.属性

内存地址加()可以运行函数。

类的属性都是放在一个字典当中,类名.属性其实就是从属性字典中获取键值。

class china:
name="zhang"
def fun(self):
print("你好张亚萍")
print(china.__dict__)
print(china.__dict__["name"])


print(china.__dict__)
print(china.__dict__["name"])
上面两句合起来的意思就是下面一句话的意思。也就是下面一句话的本质是上面的两句话。
print(china.name)

所有的类都是object类的子类。

类和函数是不一样的,尤其是创建对象传参的过程不一样。

实例是执行init函数产生的,所以只有数据属性,没有函数属性。

创建一个实例就是执行一次init方法。

函数属性属于类。

self就是实例化对象自己。

技术分享图片

技术分享图片

凡是类中定义的函数第一个参数都为self,在实例化的时候对象可以调用,python默认会将实例化对象传给self。所以这个参数可以不写,python默认传递。

类属性的删除使用del.

类调用的时候不会自动传递self,需要将实例自己传进去。

class  chinese:
    dang="社会"
    def __init__(self,name,age,gender):
        self.mingzi=name
        self.nianling=age
        self.xingbie=gender
    def bad(self):
         print("%s有不好的习惯,随地吐痰"%(self.mingzi))
z=chinese("小明",18,"男的")
t=z.bad()
print(t)
#查看类a数据属性dang:
print(chinese.dang)
#修改类数据属性dang
chinese.dang="中华人民共和国"
print(chinese.dang)
#删除类数据属性dang
del chinese.dang
print(chinese.__dict__)
#增加类函数属性
def good(self,food):
    print("%s很好吃"%food)
chinese.better=good
chinese.better(chinese,"土豆")
#删除类函数属性
del chinese.bad
print(chinese.__dict__)
#修改类函数属性
def  p(self,jiamen):
    print("%s我是修改后的函数"%jiamen)
chinese.better=p
print(chinese.better(chinese,"开心"))
class  chinese:
    dang="社会"
    def __init__(self,name,age,gender):
        self.mingzi=name
        self.nianling=age
        self.xingbie=gender
    def bad(self):
         print("%s有不好的习惯,随地吐痰"%(self.mingzi))
z=chinese("小明",18,"男的")
#查看实例属性
print(z.mingzi)
z.bad()
#增加实例属性
z.hobby="篮球"
print(z.__dict__)
print(z.hobby)
#修改实例属性
z.age=10
print(z.age)
#删除实例属性
del z.hobby
print(z.__dict__)
class  chinese:
    dang="社会"
    def __init__(self,name,age,gender):
        self.mingzi=name
        self.nianling=age
        self.xingbie=gender
    def bad(self):
         print("%s有不好的习惯,随地吐痰"%(self.mingzi))
z=chinese("小明",18,"男的")
z.dang="日本"
print(z.dang)#相当于给自己怎加了一个属性日本,运行结果为日本
print(chinese.dang)#任然是类属性,运行结果为社会

只有使用.进行访问的遵循在类中查找。如下可以证明;

dang = "社会"
class  chinese:
    def __init__(self,name,age,gender):
        self.mingzi=name
        self.nianling=age
        self.xingbie=gender
    def bad(self):
         print("%s有不好的习惯,随地吐痰"%(self.mingzi))
z=chinese("小明",18,"男的")
print(z.dang)
 
函数运行结果为AttributeError: chinese object has no attribute dang
dang = "社会"
class  chinese:
    def __init__(self,name,age,gender):
        print("-----",dang)
        self.mingzi=name
        self.nianling=age
        self.xingbie=gender
    def bad(self):
         print("%s有不好的习惯,随地吐痰"%(self.mingzi))
z=chinese("小明",18,"男的")


函数的运行结果为----- 社会
    def __init__(self,name,age,gender):

       print("--------->:",dang)
       self.mingzi=name
       self.nianling=age
       self.xingbie=gender
    def bad(self):
         print("%s有不好的习惯,随地吐痰"%(self.mingzi))
z=chinese("小明",18,"男的")



程序运行结果为--------->: ,因为只有使用.调用的才遵循字典原则,没有点则视为普通变量。
只要使用.调用就只能在类中
class  chinese:
    dang = "中国"
    l=["z","n"]
    def __init__(self,name,age,gender):
       dang = "中国"
       print("--------->:",dang)
       self.mingzi=name
       self.nianling=age
       self.xingbie=gender
    def bad(self):
         print("%s有不好的习惯,随地吐痰"%(self.mingzi))
z=chinese("小明",18,"男的")
#z.l=["1","2"]#这是给实例对象增加了一个属性
z.l.append("cc")#这是将类的数据属性进行改变,注意等号=和append等方法的不同。
print(z.l)

 

进行查找,

 













以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)

Scala的面向对象与函数编程

Python面向对象学习之八,装饰器