python3进阶_Python3 进阶教程 2020全新版

563893b107a50774814340a44b2c6468.png

REVENGE_777

1天前

如果不创建class类的话,直接使用dog.name是会报错的,因为一般数据类型不接受这种调用方式

0赞 · 0采集

168ebeafaf835ba4b55d840ff484b341.png

潘某人永不屈服

2天前

class Student()定义的时候,需要在括号内写明继承的类Person

在__init__()方法,需要调用super(Student, self).__init__(name, gender),来初始化从父类继承过来的属性

0赞 · 0采集

168ebeafaf835ba4b55d840ff484b341.png

潘某人永不屈服

3天前

加双下划线__ 的目的大概就是防止编码过程中试图使用实例修改类属性,加上__的话,在做这样的尝试时会报错,防止编码者在达不到目的的情况下还察觉不到错误

0赞 · 0采集

c77b303df7a26939a945d1ef5104c00b.png

qq_一生所爱_6

5天前

定义类属性可以直接在 class 中定义,比如在前面的Animal类中,加入地域的类属性:class Animal(object):

localtion = 'Asia'

def __init__(self, name, age):

self.name = name

self.age = age

此后,通过Animal()实例化的所有对象,都可以访问到localtion,并且得到唯一的结果。dog = Animal('wangwang', 1)

cat = Animal('mimi', 3)

print(dog.localtion) # ==> Asia

print(cat.localtion) # ==> Asia

# 类属性,也可以通过类名直接访问

print(Animal.localtion) # ==> Asia

类属性也是可以动态添加和修改的,需要注意的是,因为类属性只有一份,所以改变了,所有实例可以访问到的类属性都会变更:

0赞 · 0采集

c77b303df7a26939a945d1ef5104c00b.png

qq_一生所爱_6

5天前

在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:class Person(object):

def __init__(self, name, sex, age):

self.name = name

self.sex = sex

self.age = age

在实例化的时候,需要提供除self以外的所有参数。xiaoming = Person('Xiao Ming', 'boy', 13)

xiaohong = Person('Xiao Hong', 'girl', 14)

0赞 · 0采集

c77b303df7a26939a945d1ef5104c00b.png

qq_一生所爱_6

5天前

这些属性也可以和普通变量一样进行运算。比如xiaohong长大了一岁:xiaohong.age = xiaohong.age + 1

0赞 · 0采集

c77b303df7a26939a945d1ef5104c00b.png

qq_一生所爱_6

5天前

在Python中,通过class关键字定义一个类,比如我们需要定义一个人的类。按照 Python 的编程习惯,类名以大写字母开头。因此可以这样定义:class Person:  pass

定义了类之后,就可以对类进行实例化了,实例化是指,把抽象的类,赋予实物的过程。比如,定义好Person这个类后,就可以实例化多个Person出来了。

创建实例使用类名+(),类似函数调用的形式创建:class Person(object):  pass xiaohong = Person() xiaoming = Person()

0赞 · 0采集

c5f5733364969c81f78cfefa34cd8997.png

AE86S

2021-01-23

str() 化为字符型

0赞 · 0采集

765dc0aeabb4ebb23f6683276201b7fa.png

粗实而夜雨

2021-01-23

# Enter a code

import time

def performance(f):

def fn(*args,**kwargs):

t1 = time.time()

r = f(*args,**kwargs)

t2 = time.time()

print('call %s() in %fs' % (f.__name__, (t2-t1)))

return r

return fn

@performance

def factorial(n):

return reduce(lambda x,y: x*y, range(1, n+1))

print(factorial(10))

0赞 · 0采集

91ceeb24a6ae26f4ada485efb3bb8c2d.png

酷思

2021-01-20

继承

截图

0赞 · 0采集

f5e1b069e979a2953a7862e31705ff6d.png

4073846

2021-01-19

Python类的定义与实例化

在Python中,通过class关键字定义一个类,比如我们需要定义一个人的类。按照 Python 的编程习惯,类名以大写字母开头。因此可以这样定义:

class Person: pass

注意,在这个Person类的定义里面,并没有继承任何类,除了这样定义以外,还可以有以下两种定义方式。

class Person(): pass class Person(object): pass

这三种情况有什么区别呢?在Python3中,是没有区别的,但是在Python2中,则有一定的区别。

在Python2中,对于第一种定义的方法,Person类只有有限的几个内建函数'__doc__', '__module__', 'name',而对于第二种、第三种定义的方法,则会继承Python object对象的更多的内建函数,可以更便捷的操作对象。这是Python2版本的差异。在Python3中,我们只需要知道这三种方式都可以定义一个类即可。

定义了类之后,就可以对类进行实例化了,实例化是指,把抽象的类,赋予实物的过程。比如,定义好Person这个类后,就可以实例化多个Person出来了。

创建实例使用类名+(),类似函数调用的形式创建:

class Person(object): pass xiaohong = Person() xiaoming = Person()

任务

请练习定义一个动物类,并创建出两个实例dog, cat,打印实例,再比较两个实例是否相等。

index.py

# Enter a code

本节编程练习不计算学习进度,请电脑登录imooc.com操作

1赞 · 0采集

f5e1b069e979a2953a7862e31705ff6d.png

4073846

2021-01-19

什么是面向对象编程

截图

0赞 · 0采集

f5e1b069e979a2953a7862e31705ff6d.png

4073846

2021-01-19

面相对象

截图

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-19

8-5骄傲!!!

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-19

def add(x,y,f):

return f(x)+f(y)

import math

print(add(25,9,math.sqrt))#粗体字后面不要括号 号

另外,传数的时候不能传入变量

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-19

print(a[::-1])

### 取从后向前(相反)的元素

print(a[2::-1])

### 取从下标为2的元素翻转读取

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

class Person(object):

__slots__ = ('name', 'gender')

def __init__(self, name, gender):

self.name = name

self.gender = gender

class Students(Person):

__slots__ = ('score')

def __init__(self,gender,name,score):

self.name=name

self.gender=gender

self.score=score

Tom=Students('Ketty','girl',89)

print(Tom.score)

print(Tom.name)

print(Tom.gender)

运行成功

结果为:

89

Ketty

girl

所以要再改的话就要再定义一遍!!!!!!!!!!

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

class Person(object):

__slots__ = ('name', 'gender')

def __init__(self, name, gender):

self.name = name

self.gender = gender

class Students(Person):

__slots__ = ('score')

def __init__(self,score):

#self.name=name

#self.gender=gender

self.score=score

#Tom=Students('Ketty','girl',89)

Tom=Students(89)

print(Tom.score)

可以输出89

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

class Person(object):

__slots__ = ('name', 'gender')

def __init__(self, name, gender):

self.name = name

self.gender = gender

class Students(Person):

__slots__ = ('score')

def __init__(self,score):

self.score=score

Tom=Students('Ketty','girl',89)

print(Students(Tom.score))

运行失败!!!!!!!!!!

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

需要注意__add__()函数,它有一个参数,表示的是运算的第二个操作数,比如:r1 + r2,那么在__add__()方法中的参数,r指的就是r2,这个参数是运算符重载的时候传递的

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

4-3没看懂

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

a, b = b, a + b  这句语句表示b的值赋给a,a+b的值赋给b,所以a的值变了

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

getattr(p, 'name') # 获取name属性

'Alice'

setattr(p, 'name', 'Adam') # 设置新的name属性

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

def func(a, b, c=0, *args, **kw):

print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw

在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。>>> func(1, 2)a = 1 b = 2 c = 0 args = () kw = {}>>> func(1, 2, c=3)a = 1 b = 2 c = 3 args = () kw = {}>>> func(1, 2, 3, 'a', 'b')a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}>>> func(1, 2, 3, 'a', 'b', x=99)a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

print(Animal.get_localtion())

Animal.set_localtion(3)

print(Animal.get_localtion())

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

def set_name(self, name):方法就是为了修改私有属性的值。要是不用这个方法,也可以在get_name()中添加相应的代码也可以实现。

def get_name(self, name):

self.__name = name

return self.__name

但是,在实例化对象后调用的时候,就需要带上修改的参数,比如:

cat = Animal()

print(cat.get_name('mimi'))

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

class Animal(object):

def __init__(self, name, age, localtion):

self.name = name

self.age = age

self.localtion2= localtion

dog = Animal('wangwang', 1, 'GuangDong')

print(dog.name)

print(dog.age)

print(dog.localtion2)

运行成功wangwang

1

GuangDong

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

在外部访问私有属性将会抛出异常,提示没有这个属性。

虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。私有属性是为了保护类或实例属性不被外部污染而设计的。

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

在类属性和实例属性同时存在的情况下,实例属性的优先级是要高于类属性的,在操作实例的时候,优先是操作实例的属性,另外,当实例没有和类同名的时候,通过实例对象,不可以修改类属性,通过实例方法修改类属性,只是给实例绑定了一个对应的实例属性

0赞 · 0采集

66f754e0a6c5205a867f87ba8151cae3.png

qq_慕仙9428847

2021-01-18

类属性也是可以动态添加和修改的,需要注意的是,因为类属性只有一份,所以改变了,所有实例可以访问到的类属性都会变更

def与引用函数差不多有什么都需要执行的操作可以直接在def __init__(self,name,age):里写

0赞 · 0采集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值