面向对象编程

对象和类的相关概念

类:是对一群具有相同特征或者行为的事物的统称,是抽象的,不能直接使用。
例如 人类,狗类,猫类…
描述一个类通过静态的属性和动态的行为
属性:黄毛,大眼睛
行为:会跑,会叫
类可以理解为一种事物的模板

  • 对象

对象:是由类创造出来的具体实体,可以直接使用。例如 大黄,小白。

类和对象之间的关系

1.先有类后有对象
2.类只有一个,而对象可以有多个

类的设计

在程序中设计一个类,通常需要满足以下3个要素:
类名:大驼峰命名法 即类名的首字母大写
属性:描述这类事物的特征。
方法:描述这类事物的具体行为。

class Student():
    name = '' 
    def study(self):
        print('{}要去学习了'.format(self.name))
    def eat(self):
        print('{}要去吃饭了'.format(self.name))
# 创建一个实例化对象
zs = Student()   # 对象 = 类名()
zs.name = '张三' 
zs.study() # 调用类里面的方法  对象名.方法名()
zs.eat()
  • self 变量
查看self和 对象的内存id值是否相同
class Human():
    def eat(self):
        print('人在吃饭',id(self))

zs = Human()
zs.eat()
print(id(zs))

ls = Human()
ls.eat()
print(id(ls))

self:哪个对象调用方法或者属性,self就是哪个变量

__init__方法

init()内置方法在创建对象的时候自动执行。

class Student():
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def show(self):
        print('我叫{}年龄{}性别{}'.format(self.name,self.age,self.sex))

zs = Student('张三',18,'男')# 这行代码执行结束后,系统自动调用__init__()方法,__init__()方法执行结束后,再继续执行下一行代码
zs.show()

我们可以在__init__()中做一些初始化操作。

class Cat():
    def __init__(self):
        print('我是初始化方法')
        self.name = 'tom'

cat = Cat()
# 我是初始化方法 -->运行结果 (不是注释)
print(cat.name) # tom

cat2 = Cat()
# 我是初始化方法
print(cat2.name) # tom

利用参数设置初始值
在调用__init__():方法的时候进行初始值的设置
格式:init(self,arg1,arg2…)
对象调用时:dog = Dog(‘aa’,‘bb’,…)
实参和形参一一对应,定义了几个形参就要传递几个实参。

  • 在类的外部添加属性

方式:对象名.属性名 = 值
注意:这种方式虽然简单,但是不推荐使用。

class Person():
    def eat(self):
        print('吃...')
        print(self.name)

per = Person()
per.name = '张三'
per.eat()

# 不推荐使用
per1 = Person()
# 不添加name属性,但是调用eat()方法就会报错
per1.eat() # AttributeError: 'Person' object has no attribute 'name'

str()
如果一个类没有__str__()方法,就会调用父类中的__str__()方法,父类中的__str__()方法默认返回的是对象的内存地址,所以如果我们想要打印对象保存的信息的时候,就需要重写__str__()方法

class Dog():
    def __init__(self,color,age):
        self.color = color
        self.age = age
    def __str__(self):
        return '颜色%s 年龄%d'%(self.color,self.age)

d = Dog('红色',18)
print(d) # 颜色红色 年龄18
# 如果狗类中没有__str__()方法,print(d)的时候默认返回的是对象d的内存地址

类属性和实例属性

实例属性:在实例对象中定义的属性
类属性(静态属性):
在类对象(也就是类)中定义的属性,并且多个实例对象之间共享一份类属性。
类属性的使用方式:
类名.类属性
也可以使用 对象名.类属性

# 类属性为不可修改类型时:
class People():
    tax = 0.09  # 类属性
    def __init__(self,salary):
        self.salary = salary
    def jiaoshui(self):  # 行为
        return self.salary*self.tax
a = People(100000)
b = People(200000)
# print(People.tax) # 类名.类属性
# print(a.tax) # 对象名.类属性
# print(b.tax)

# a.tax = 0.08
# print(a.tax)
# print(b.tax)
# print(People.tax)
print(id(a.tax))
print(id(People.tax))
a.tax += 0.01
print('%.2f'%a.tax,id(a.tax))
print(People.tax,id(People.tax))
# 类属性为可修改类型时:
class A():
    books = ['三国','西游记']
    def __init__(self,name):
        self.name = name

x = A('张三')
y = A('李四')
x.books[0] = '水浒传'
# print(y.books)
# print(A.books)
x.books = ['红楼梦','大秦帝国']
print(x.books)
print(y.books)
print(A.books)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值