python面向对象,类

Posted 星空6

tags:

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

:抽象的概念;是属性和方法的集合。类中的函数叫方法。

对象instance、object

对象是类的具象,是一个实体。对象是数据和操作的封装。

面向对象3要素:

  1.封装

  2.继承:

    多复用,继承来的就不用自己写了

    多继承少修改。

  3.多态

    面向对象编程最灵活的地方,动态绑定。

类:

  必须使用class关键字。

  类名必须使用大驼峰命名。

  类定义完成后,就产生了一个类对象,绑定到了ClassName上。

类对象:类的定义就会生成一个类对象。

类的属性:类定义中的变量和类中定义的方法都是类的属性。

类变量:x是类MyClass的变量。

class MyClass:
    """help myclass"""
    x=123
    def foo(self):
        print(self.x)
print(MyClass)
print(MyClass.__name__)
print(MyClass.x)
print(MyClass.foo)
print(MyClass.__doc__)
print(type(MyClass))

 foo是method方法对象,不是普通的函数对象function了(函数function不在类里面),它必须至少有一个参数,且第一个参数必须是self(self可以换名字),但这个参数位置就留给了self。 java是使用this.

 self指代当前实例本身; 

 

 __init__方法

MyClass()实际上调用的是__init__(self)方法,可以不定义,如果没有定义会在实例后隐式调用。

作用:对实例进行初始化。

__init__()方法不能有返回值,也就是只能是None.

实例可以访问类属性,类不可以访问实例属性。方法中可以通过self.y等来定义实例属性。

初始化函数可以多参

 

 

 

 

 

 

 

 

 实例对象instance

类实例化后一定会获得一个对象,就是实例对象。

__init__方法的第一个参数self就是指代某一个实例。

 实例变量,类变量

实例变量是每一个实例自己的变量,是自己独有的;类变量是类的变量,是类的所有实例共享的属性和方法。

特殊属性:含义

__name__:对象名

__class__:对象的类型

__dict__:对象的属性的字典

__qualname__:类的限定名

 

 总结

  是类的,也是这个类所有实例的,其实例都可以访问到;是实例的,就是这个实例自己的,通过类访问不到。

类变量是属于类的变量,这个类的所有实例可以共享这个变量。

实例可以动态的给自己增加一个属性。实例.__dict__[变量名]和实例.变量名都可以访问到。

实例的同名变量会隐藏这类变量,或者说是覆盖了这个类变量。

实例属性的查找顺序

指的是实例使用.来访问属性,会先找自己的__dict__,如果没有,然后通过属性__class__找到自己的类,再去类的__dict__中找。

注意,如果实例使用__dict__[变量名]访问变量,将不会按照上面的查找顺序找变量了。

一般来说,类变量使用全大写来命名。

class Person:
    age=3
    height=170
    def __init__(self,name,age=18):
        self.name=name
        self.age=age
hua=Person(\'hua\')
Tony=Person("Tony",20)
Person.age=30
print(Person.age,hua.age,Tony.age)#30,18,20
print(Person.__dict__,hua.__dict__,Tony.__dict__,sep="\\n")
print(Person.height,hua.height,Tony.height)#170,170,170
Person.height+=20
print(Person.height,hua.height,Tony.height)#190,190,190
print(Person.__dict__,hua.__dict__,Tony.__dict__,sep="\\n")
hua.height=20
print(Person.height,hua.height,Tony.height)#190,20,190
print(Person.__dict__,hua.__dict__,Tony.__dict__,sep="\\n")
print(Person.__dict__["height"])
print(Tony.__dict__["height"])#报错keyerror
#对象优先访问自己的属性/字典,自己没有,则访问类的属性/字典

  

  

 

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

VSCode自定义代码片段9——JS中的面向对象编程

Python面向对象基础

Python 类I

python 面向对象专题:继承

python 面向对象专题:继承

Python面向对象基础