python3.6类和面向对象-20180510

面向对象:

类class:

类是抽象的概念,是一类实物共同特征的集合.
计算机语言来描述类:属性(数据)和方法(动作).

对象instance,object
对象是类的具象,是一个实例
就像:每个人都是人类的个体,每个人都是抽象概念'人类'的不同的实例

举例:你吃鱼

你,就是对象;  鱼,也是对象;  吃是动作

一切皆对象
对象是数据和操作的封装
对象是独立的,但是对象之间可以相互作用

面向对象的三要素:
1.封装:把属性和操作组装在一起
2.继承:多继承少修改

3.多态:

定义类:

class ClassName:
    (语句块)

1.必须使用class关键词
2.类名使用大驼峰命名
3.类定义完成后,就产生了一个类对象,绑定到了ClassName上

举个小栗子:

class MyClass:
    '''A example class'''
    x = 'abc'        #类属性

    def foo(self):   #类属性foo,也是方法
        return 'My Class'

print(MyClass.x)          #打印结果  abc
print(MyClass.foo)        #打印结果  <function MyClass.foo at 0x000000CFD7A501E0> 函数对象对应的内存地址
print(MyClass.__doc__)    #打印结果  A example class
类对象和类属性

类对象:类的定义就会生成一个类对象
类的属性:类定义中的变量和类中定义的方法都是类的属性
类变量:x是类MyClass的变量

MyClass中,x,foo都是类的属性,__doc__也是类的属性

foo方法是类的属性
foo是 method方法对象,不是普通的函数对象function了,它必须至少有一个参数,且 第一个参数必须是self(self也可以换名字), self指代当前实例本身

实例化:

class MyClass:
    x = '123'

    def foo(self):
        print(self.x)

a = MyClass()         #实例化,初始化
print(a.x)
print(a.foo())
a = MyClass()初始化后,a传给self,访问类的属性

__init__方法:
MyClass()实际上调用的是__init__(self)方法,可以不定义,如果没有定义,会在实例化后隐式调用,作用是对实例进行 初始化

class MyClass:
    x =123

    def __init__(self):  #初始化
        print('init')

a = MyClass()          #会调用__init__
print(a.foo())

小例子1:

class Person:
    x = 'abc'
    def __init__(self,name):
        self.name = name

a = Person('tom')
b = Person('jerry')

print(a.name, b.name)      #打印结果 tom jerry
a和b会传入self中,调用self.name = name  (后边的name为形参,由a和b传入实参)

小例子2:

class Person:
    x = 'abc' #类的属性
    def __init__(self,name):
        self.name = name    #self.name中的name是实例的属性

a = Person('tom')
b = Person('tom')

print(a.name, b.name)        #打印结果tom tom
print(a.x,b.x)               #abc abc   a和b调用Person类中的x属性
print(a == b)                False
print(a is b)                False   即便是赋相同的name值,但是a和b是不同的两个实例

小例子3:

class Person:
    x = 'abc'
    def __init__(self,name,age=18):
        self.name = name
        self.y = age

a = Person('tom')
b = Person('jerry',20)

print(a.name, b.name)      #打印结果tom jerry
print(a.y,b.y)             #打印结果18 20 ,默认参数为18,b给age赋值为20
class Person:
    x = 'abc'
    def __init__(self,name,age=18):
        self.name = name
        self.y = age
    def show(self):
        print(self.name,self.y)

a = Person('tom')
b = Person('jerry',20)

a.show()               #tom 18
b.show()               #jerry 20

外部修改实例变量的值:

class Person:
    x = 'abc'
    def __init__(self,name,age=18):
        self.name = name
        self.y = age
    def show(self):
        print(self.name,self.y)

a = Person('tom')
b = Person('jerry',20)
b.y = 30 #在外面更改b的y值

b.show()     #打印结果jerry 30


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值