Python基础:类与面向对象编程(一)

请不要因为别人都在交卷自己就乱写答案


声明

仅作为个人学习使用,仅供参考


什么是类中的属性、方法

我们用 class 定义类

类的 属性 就是定义在类中的 变量

类的 方法 就是定义在类中的 函数(def)

class example1: 类的属性
    a = 1
    b = 2
    c = 3
    def example2(self): 类的方法
        pass 

定义类、为类添加属性

使用class 定义

如上a,b,c就是添加属性

类的实例化

d = expample1() 即为类的实例化

class example1:
    a = 1
    b = 2
    c = 3
    def example2(self):
        pass

d = example1()   实例化


实例化后 d与属性a,b,c就形成了一种从属关系,即可用 '.' 连接
例如
 
print(d.a)       输出1
print(d.b)       输出2
print(d.c)       输出3

d 作为 类example1的 实例

输出 d 和 d 的类型就可以看出之间的关系

class example1:
    a = 1
    b = 2
    c = 3
    def example2(self):
        pass

d = example1()

print(d)                <__main__.example1 object at 0x0000020E8C100C50>

print(type(d))         
type(d) 返回 <class '__main__.example1'>

__main__  是我们当前运行的main.py文件
example1  是我们在文件中定义的example1类
.         表明从属关系

即 变量 d 属于当前文件中所定义的 example1 类型

直接运行的文件 就是__main__

注意

什么是self,在后文可以见到

在类中

实例名 其实和 self 是一样的,

有 def 的话 第一个传入的值就是实例名

(当然如果你把self放在第一位 那self就是实例名)

 输出self或者实例名 都会显示如上内存地址

例如 <__main__.example1 object at 0x0000020E8C100C50>

你可以通过__str__来控制self的输出

属性的修改

实例化后 对属性进行重新赋值

class example1:
    a = 1
    b = 2
    c = 3
    def example2(self):
        pass

d = example1()

d.a = 100
print(d.a)   输出100


e = example1()
print(e.a)   输出1

当然 其他实例的 .a 肯定还是1

方法定义与调用

前面已经说过  方法  就是类中的def

调用方法 时,Python 会 强制性 地将 实例对象本身 传递给类方法的 第一个参数,

我们习惯性的把第一个参数设置为 self ,那么 self 就是实例对象本身

class example1:
    a = 1
    b = 2
    c = 3
    def example2(self,a,b,c):
        self.a = a
        self.b = b
        self.c = c
        print('成功调用')

d = example1()
d.example2(1,2,3)


def中有四个参数 可我们传入的只有三个参数

实际上
self 为 d
a    为 1
b    为 2
c    为 3
证明猜想

class example1:
    a = 1
    b = 2
    c = 3
    def example2(self,a,b,c):
        self.a = a
        self.b = b
        self.c = c
        print('成功调用')
        print(self)

d = example1()
d.example2(1,2,3)
print(d)

可见我们的猜测是正确的 第一个传入的值 = self = 实例对象本身

另外一种调用方法

d = example1()

d.example2(1,2,3)

d=example1()

example.example2(d,1,2,3)

__init__() 方法

实例化新的对象时 自动调用

class example1:

    def __init__(self,a,b,c):
        self.a = a
        self.b = b
        self.c = c
        print('成功调用')
        print(a)

#d = example1()
#d.example2(1,2,3)
#example1.example2(d,1,2,3)
不需要实例化 直接一条代码解决实例化+赋值
d = example1(1,2,3)

输出1

__str__()方法

前文不是说 输出 self 或实例对象本身会输出内存地址吗

通过__str__解决

class example1:

    def __str__(self):
        return '这才是我的想要的'

    def __init__(self,a,b,c):
        self.a = a
        self.b = b
        self.c = c
        print('成功调用')
        print(self)

d = example1(1,2,3) 
print(d)

取类名的代码规范

类取名需要 首字母大写,以便和函数名区分开来

d = example1(1,2,3)

编写了 init() 方法后我们再实例化  example1 类时,看起来很像在调用一个名为 example1 的函数。

为避免引发歧义,凸显出类是一个整体性的概念,Python 官方建议为类取名时 首字母大写,以便和函数名区分开来。如果所要描述的类不能用单个单词表达,则每个单词的首字母都需要大写,比如 FilmSelector

因此我们最好改成 Example1  , 以便于区分 类名与函数名

class Example1:

        pass


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值