常犯错误,源于python基础不扎实(1)

编码问题

Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
so,在代码开头输入

# -*- coding: UTF-8 -*- 或者 # coding=utf-8 就行了

Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。

but 注意:如果你使用编辑器,同时需要设置 py 文件存储的格式为 UTF-8,否则会出现类似以下错误信息:
所以还是加上吧,不然就会出现下面的错误:

SyntaxError: Non-ASCII character '\xe4' in file test.py on line 2, but no encoding declared

解决方式:

Pycharm 设置步骤:

进入 file > Settings,在输入框搜索 encoding。
找到 Editor > File encodings,将 IDE Encoding 和 Project Encoding 设置为utf-8。
在这里插入图片描述

类的定义,类中初始化形式

类的定义是通过关键字 class 实现的
class ClassName: 语句1 ... 语句n
正常离开(从结尾出)类定义时,就会创建一个类对象。类对象将在这里被绑定到类定义头给出的类名称(在上面的例子中就是 ClassName )

形式1:def_init_(self)

只有一个self,指的是实例的本身,但是在方法的类部,包含两个属性,name, grade。它允许定义一个空的结构,当新数据来时,可以直接添加。实例化时,需要实例化之后,再进行赋值。

class Student_Grade:  
    def __init__(self):  # 类似于c++中的默认构造函数
        self.name = None
        self.grade = None
        
    def print_grade(self):
        print("%s grade is %s" % (self.name,self.grade))


s1 = Student()  # 创建对象s1
s1.name = "Tom"
s1.grade = 8

s2 = Student()  # 创建对象s2
s2.name = "Jerry"
s2.grade = 7

s1.print_grade()
s2.print_grade()

形式2:def_init_(self, 参数1,参数2,···,参数n)

直接给定了两个参数name和grade,且属性值不允许为空。实例化时,直接传入参数。

class Student_Grade: 
    def __init__(self, name, grade):  #类似于C++中的有参构造函数
        self.name = name
        self.grade = grade

    def print_grade(self):
        print("%s grade is %s" % (self.name,self.grade))

s1 = Student("Tom", 8)  # 创建对象s1
s2 = Student("Jerry", 7)  # 创建对象s2

s1.print_grade()
s2.print_grade()

再讲一次:

①self.valueName
valueName:表示self对象,即实例的变量
②self.function()
function:表示是调用的是self对象,即实例的函数

Python中就规定好了,函数的第一个参数,就必须是实例对象本身,并且建议,约定俗称,把其名字写为self
class Person:
    def __init__(self, newPersionName):
        self.name = newPersionName
#此处正确的,通过访问self.name的形式,实现了:
# 1.给实例中,增加了name变量
# 2.并且给name赋了初值,为newPersionName

    def sayYourName(self):
        print('My name is %s'%(self.name))
#此处由于开始正确的初始化了self对象,使得其中有了name变量,
#所以此处可以正确访问了name值了


p = Person('Bob')
p.sayYourName()   #第一种调用方法
print("-" * 50)
Person('Bob').sayYourName()#第二种调用方法

call()

一个类实例也可以变成一个可调用对象

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def __call__(self, friend):
        print('My name is %s...' % self.name)
        print('My friend is %s...' % friend)
>>> p = Person('Bob', 'male')  
>>> p('Tim')     #对 Person 实例直接调用
My name is Bob...
My friend is Tim...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值