-
操作类的私有属性,则应该定义类的方法
1.类方法需要使用@classmethod来标记为类方法,否则定义的还是实例方法
2.类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.__localtion 实际上相当于Animal.__localtion
查看全部 -
self是一个引用,指向调用该方法的实例对象本身.
可以通过定义类或者实例的方法来操作私有属性查看全部 -
不能被外部访问的属性称为私有属性。私有属性是以双下划线'__'开头的属性。
查看全部 -
如果类属性和实例属性名字相同时,实例属性的优先级是要高于类属性的
查看全部 -
类属性有且只有一份,可以动态添加和修改的.
查看全部 -
在定义 类时,可以为类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:
class Person(object):
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age查看全部 -
class person:
def __init__(self, name, gender):
self.name = name
self.gender = gender
def who(self):
return 'i am a person , my name is %s' % self.name
class student(person):
def __init__(self, name, gender, score):
super(student, self).__init__(name, gender)
self.score = score
def who(self):
return 'i am a student, my name is %s' % self.name
class teacher(person):
def __init__(self, name, gender, course):
super(teacher, self).__init__(name, gender)
self.course = course
def who(self):
return 'i am a teacher, my name is %s' % self.name
class skm:
def __init__(self, name):
self.name = name
def who(self):
return ' i can play'
class baskm(skm, teacher):
def __init__(self, name, course):
super(baskm, self).__init__(name)
self.course = course
def who(self):
return self.name + ' is a teacher,'+ self.name +' can play ' + self.course
class fbskm(skm, student):
def __init__(self, name, course):
super(fbskm, self).__init__(name)
self.course = course
def who(self):
return self.name + ' is a student,'+ self.name +' can play ' + self.course
p1 = baskm('bob', 'basketball')
print(p1.who())
p2 = fbskm('Lily','football')
print(p2.who())查看全部 -
String.capitalize()可以将字符串变为首字母大写,其他小写的规范查看全部
-
客户端和服务端会有一些不一样。
服务端建立需要四个步骤:新建socket、绑定IP和端口(bind)、监听连接(listen)、接受连接(accept)。
客户端建立则简单一些,仅需两个步骤:新建socket、连接服务端(connect)。查看全部 -
_str__是面向用户的,而__repr__面向程序员,可以理解为:__str__是给用户使用的,而__repr__是提供给程序员用于调试程序用的。
__str__和__repr__这两个方法都是用于显示的。
查看全部 -
python实例属性的初始化
在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:
class Person(object):
def __init__(self, name, sex, age):注:(def后需要一个空格,init左右两边都是双下划线)
self.name = name
self.sex = sex
self.age = age需要注意的是,__init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。
定义类后,就可以相应的实例化对象了,在实例化的时候,需要提供除self以外的所有参数。xiaoming = Person('Xiao Ming', 'boy', 13)
xiaohong = Person('Xiao Hong', 'girl', 14)而访问这些属性的方式和之前的一样:
print(xiaohong.name)
print(xiaohong.sex)
print(xiaohong.age)
# 但当访问不存在的属性时,依然会报错要特别注意的是,初学者定义__init__()方法常常忘记了 self 参数
这种情况下,如果还是如下实例化,将会报错。
查看全部 -
Python实例属性的定义
虽然前面我们已经通过Person类创建出xiaoming、xiaohong等实例,但是这些实例看上去并没有任何区别。在现实世界中,一个人拥有名字、性别、年龄等等的信息,在Python中,可以通过以下的方式赋予实例这些属性,并且把这些属性打印出来。
xiaohong.name = 'xiaohong' xiaohong.sex = 'girl' xiaohong.age = 13 print(xiaohong.name) print(xiaohong.sex) print(xiaohong.age)
除此以外,这些属性也可以和普通变量一样进行运算。比如xiaohong长大了一岁:
xiaohong.age = xiaohong.age + 1
查看全部 -
python类的定义与实例化
通过class关键字定义一个类,比如我们需要定义一个人的类。按照 Python 的编程习惯,类名以大写字母开头。因此可以这样定义:
class Person: pass
注意,在这个Person类的定义里面,并没有继承任何类,除了这样定义以外,还可以有以下两种定义方式。
class Person(): pass class Person(object): pass
定义了类之后,就可以对类进行实例化了,实例化是指,把抽象的类,赋予实物的过程。比如,定义好Person这个类后,就可以实例化多个Person出来了。
创建实例使用类名+(),类似函数调用的形式创建:class Person(object): pass xiaohong = Person() xiaoming = Person()
查看全部 -
r1 + r2 就相当于r1.__add__(r2)
Rational(1, 2) Rational(2, 3)
p q p q
r1 = Rational(1, 2)
中的(1,2)代入到Rational的__init_中,此时
即为:self.p = 1
self.q = 2
self.p * r.q + self.q * r.p, self.q * r.q
1 * 3 + 2 * 2 , 2 * 3
(7 , 6)
查看全部 -
装饰器@不好理解
#funA 作为装饰器函数
def funA(fn):
#...
fn() # 执行传入的fn参数
#...
return '...'
@funA
def funB():
#...
上面程序完全等价于下面的程序:
def funA(fn):
#...
fn() # 执行传入的fn参数
#...
return '...'
def funB():
#...
funB = funA(funB)
通过比对以上 2 段程序不难发现,使用函数装饰器 A() 去装饰另一个函数 B(),其底层执行了如下 2 步操作:
将 B 作为参数传给 A() 函数;
将 A() 函数执行完成的返回值反馈回 B。
查看全部 -
对于可调用对象,实际上“名称()”可以理解为是“名称.__call__()”的简写
Python 中,凡是可以将 () 直接应用到自身并执行,都称为可调用对象。可调用对象包括自定义的函数、Python 内置函数以及本节所讲的类实例对象。
查看全部 -
官方给的答案不改变原列表中的内容。
查看全部
举报